templates/ical/jquery.ical.js in compass-jquery-plugin-0.3.2.pre.2 vs templates/ical/jquery.ical.js in compass-jquery-plugin-0.3.2.0
- old
+ new
@@ -1,9 +1,9 @@
/*****************************************************************************
* FILE: anytime.js - The Any+Time(TM) JavaScript Library (source)
*
- * VERSION: 4.1112E
+ * VERSION: 4.1112H
*
* Copyright 2008-2010 Andrew M. Andrews III (www.AMA3.com). Some Rights
* Reserved. This work licensed under the Creative Commons Attribution-
* Noncommercial-Share Alike 3.0 Unported License except in jurisdicitons
* for which the license has been ported by Creative Commons International,
@@ -53,131 +53,131 @@
* Thanks to Chu for help with a setMonth() issue!
****************************************************************************/
var AnyTime =
{
- //=============================================================================
- // AnyTime.pad() pads a value with a specified number of zeroes and returns
- // a string containing the padded value.
- //=============================================================================
+ //=============================================================================
+ // AnyTime.pad() pads a value with a specified number of zeroes and returns
+ // a string containing the padded value.
+ //=============================================================================
- pad: function( val, len )
- {
- var str = String(Math.abs(val));
- while ( str.length < len )
- str = '0'+str;
- if ( val < 0 )
- str = '-'+str;
- return str;
- }
+ pad: function( val, len )
+ {
+ var str = String(Math.abs(val));
+ while ( str.length < len )
+ str = '0'+str;
+ if ( val < 0 )
+ str = '-'+str;
+ return str;
+ }
};
(function($)
{
- // private members
+ // private members
- var __oneDay = (24*60*60*1000);
- var __daysIn = [ 31,28,31,30,31,30,31,31,30,31,30,31 ];
- var __iframe = null;
- var __initialized = false;
- var __msie6 = ( navigator.userAgent.indexOf('MSIE 6') > 0 );
- var __msie7 = ( navigator.userAgent.indexOf('MSIE 7') > 0 );
- var __pickers = [];
+ var __oneDay = (24*60*60*1000);
+ var __daysIn = [ 31,28,31,30,31,30,31,31,30,31,30,31 ];
+ var __iframe = null;
+ var __initialized = false;
+ var __msie6 = ( navigator.userAgent.indexOf('MSIE 6') > 0 );
+ var __msie7 = ( navigator.userAgent.indexOf('MSIE 7') > 0 );
+ var __pickers = [];
- // Add methods to jQuery to create and destroy pickers using
- // the typical jQuery approach.
-
- jQuery.prototype.AnyTime_picker = function( options )
- {
- return this.each( function(i) { AnyTime.picker( this.id, options ); } );
- }
-
- jQuery.prototype.AnyTime_noPicker = function()
- {
- return this.each( function(i) { AnyTime.noPicker( this.id ); } );
- }
-
- // Add special methods to jQuery to compute the height and width
- // of picker components differently for Internet Explorer 6.x
- // This prevents the pickers from being too tall and wide.
-
- jQuery.prototype.AnyTime_height = function(inclusive)
- {
- return ( __msie6 ?
- Number(this.css('height').replace(/[^0-9]/g,'')) :
- this.outerHeight(inclusive) );
- };
+ // Add methods to jQuery to create and destroy pickers using
+ // the typical jQuery approach.
+
+ jQuery.prototype.AnyTime_picker = function( options )
+ {
+ return this.each( function(i) { AnyTime.picker( this.id, options ); } );
+ }
+
+ jQuery.prototype.AnyTime_noPicker = function()
+ {
+ return this.each( function(i) { AnyTime.noPicker( this.id ); } );
+ }
+
+ // Add special methods to jQuery to compute the height and width
+ // of picker components differently for Internet Explorer 6.x
+ // This prevents the pickers from being too tall and wide.
+
+ jQuery.prototype.AnyTime_height = function(inclusive)
+ {
+ return ( __msie6 ?
+ Number(this.css('height').replace(/[^0-9]/g,'')) :
+ this.outerHeight(inclusive) );
+ };
- jQuery.prototype.AnyTime_width = function(inclusive)
- {
- return ( __msie6 ?
- (1+Number(this.css('width').replace(/[^0-9]/g,''))) :
- this.outerWidth(inclusive) );
- };
+ jQuery.prototype.AnyTime_width = function(inclusive)
+ {
+ return ( __msie6 ?
+ (1+Number(this.css('width').replace(/[^0-9]/g,''))) :
+ this.outerWidth(inclusive) );
+ };
-
- // Add a method to jQuery to change the classes of an element to
- // indicate whether it's value is current (used by AnyTime.picker),
- // and another to trigger the click handler for the currently-
- // selected button under an element.
+
+ // Add a method to jQuery to change the classes of an element to
+ // indicate whether it's value is current (used by AnyTime.picker),
+ // and another to trigger the click handler for the currently-
+ // selected button under an element.
- jQuery.prototype.AnyTime_current = function(isCurrent,isLegal)
- {
- if ( isCurrent )
- {
- this.removeClass('AnyTime-out-btn ui-state-default ui-state-disabled ui-state-highlight');
- this.addClass('AnyTime-cur-btn ui-state-default ui-state-highlight');
- }
- else
- {
- this.removeClass('AnyTime-cur-btn ui-state-highlight');
- if ( ! isLegal )
- this.addClass('AnyTime-out-btn ui-state-disabled');
- else
- this.removeClass('AnyTime-out-btn ui-state-disabled');
- }
- };
-
- jQuery.prototype.AnyTime_clickCurrent = function()
- {
- this.find('.AnyTime-cur-btn').triggerHandler('click');
- }
-
- $(document).ready(
- function()
- {
- // IE6 doesn't float popups over <select> elements unless an
- // <iframe> is inserted between them! The <iframe> is added to
- // the page *before* the popups are moved, so they will appear
- // after the <iframe>.
-
- if ( __msie6 )
- {
- __iframe = $('<iframe frameborder="0" scrolling="no"></iframe>');
- __iframe.src = "javascript:'<html></html>';";
- $(__iframe).css( {
- display: 'block',
- height: '1px',
- left: '0',
- top: '0',
- width: '1px',
- zIndex: 0
- } );
- $(document.body).append(__iframe);
- }
-
- // Move popup windows to the end of the page. This allows them to
- // overcome XHTML restrictions on <table> placement enforced by MSIE.
-
- for ( var id in __pickers )
+ jQuery.prototype.AnyTime_current = function(isCurrent,isLegal)
+ {
+ if ( isCurrent )
+ {
+ this.removeClass('AnyTime-out-btn ui-state-default ui-state-disabled ui-state-highlight');
+ this.addClass('AnyTime-cur-btn ui-state-default ui-state-highlight');
+ }
+ else
+ {
+ this.removeClass('AnyTime-cur-btn ui-state-highlight');
+ if ( ! isLegal )
+ this.addClass('AnyTime-out-btn ui-state-disabled');
+ else
+ this.removeClass('AnyTime-out-btn ui-state-disabled');
+ }
+ };
+
+ jQuery.prototype.AnyTime_clickCurrent = function()
+ {
+ this.find('.AnyTime-cur-btn').triggerHandler('click');
+ }
+
+ $(document).ready(
+ function()
+ {
+ // IE6 doesn't float popups over <select> elements unless an
+ // <iframe> is inserted between them! The <iframe> is added to
+ // the page *before* the popups are moved, so they will appear
+ // after the <iframe>.
+
+ if ( __msie6 )
+ {
+ __iframe = $('<iframe frameborder="0" scrolling="no"></iframe>');
+ __iframe.src = "javascript:'<html></html>';";
+ $(__iframe).css( {
+ display: 'block',
+ height: '1px',
+ left: '0',
+ top: '0',
+ width: '1px',
+ zIndex: 0
+ } );
+ $(document.body).append(__iframe);
+ }
+
+ // Move popup windows to the end of the page. This allows them to
+ // overcome XHTML restrictions on <table> placement enforced by MSIE.
+
+ for ( var id in __pickers )
if ( ! Array.prototype[id] ) // prototype.js compatibility issue
- __pickers[id].onReady();
-
- __initialized = true;
-
- } ); // document.ready
-
+ __pickers[id].onReady();
+
+ __initialized = true;
+
+ } ); // document.ready
+
//=============================================================================
// AnyTime.Converter
//
// This object converts between Date objects and Strings.
//
@@ -275,11 +275,11 @@
// to remember that a colon (:) has a period (.) on the bottom and
// a semicolon (;) has a comma (,), and in English sentence structure,
// a period represents a more significant stop than a comma, and
// %: might be a longer string than %; (I know it's a stretch, but
// it's easier than looking it up every time)!
-//
+//
// %- - the timezone offset, with a sign, in hours and minutes, in
// three-or-four-digit, 24-hour format with no delimiter (for
// example, +530).
//
// %; - the timezone offset, with a sign, in hours and minutes, in
@@ -355,776 +355,776 @@
// (as selected using the picker).
//=============================================================================
AnyTime.Converter = function(options)
{
- // private members
+ // private members
- var _flen = 0;
- var _longDay = 9;
- var _longMon = 9;
- var _shortDay = 6;
- var _shortMon = 3;
- var _offAl = Number.MIN_VALUE; // format time zone offset alleged
- var _offCap = Number.MIN_VALUE; // parsed time zone offset captured
- var _offF = Number.MIN_VALUE; // format time zone offset imposed
- var _offFSI = (-1); // format time zone label subindex
- var _offP = Number.MIN_VALUE; // parsed time zone offset assumed
- var _offPSI = (-1); // parsed time zone label subindex captured
- var _captureOffset = false;
+ var _flen = 0;
+ var _longDay = 9;
+ var _longMon = 9;
+ var _shortDay = 6;
+ var _shortMon = 3;
+ var _offAl = Number.MIN_VALUE; // format time zone offset alleged
+ var _offCap = Number.MIN_VALUE; // parsed time zone offset captured
+ var _offF = Number.MIN_VALUE; // format time zone offset imposed
+ var _offFSI = (-1); // format time zone label subindex
+ var _offP = Number.MIN_VALUE; // parsed time zone offset assumed
+ var _offPSI = (-1); // parsed time zone label subindex captured
+ var _captureOffset = false;
- // public members
+ // public members
- this.fmt = '%Y-%m-%d %T';
- this.dAbbr = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
- this.dNames = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
- this.eAbbr = ['BCE','CE'];
- this.mAbbr = [ 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec' ];
- this.mNames = [ 'January','February','March','April','May','June','July','August','September','October','November','December' ];
- this.baseYear = null;
-
- //-------------------------------------------------------------------------
- // AnyTime.Converter.dAt() returns true if the character in str at pos
- // is a digit.
- //-------------------------------------------------------------------------
-
- this.dAt = function( str, pos )
- {
- return ( (str.charCodeAt(pos)>='0'.charCodeAt(0)) &&
- (str.charCodeAt(pos)<='9'.charCodeAt(0)) );
- };
-
- //-------------------------------------------------------------------------
- // AnyTime.Converter.format() returns a String containing the value
- // of a specified Date object, using the format string passed to
- // AnyTime.Converter().
- //
- // Method parameter:
- //
- // date - the Date object to be converted
- //-------------------------------------------------------------------------
-
- this.format = function( date )
- {
- var d = new Date(date.getTime());
- if ( ( _offAl == Number.MIN_VALUE ) && ( _offF != Number.MIN_VALUE ) )
- d.setTime( ( d.getTime() + (d.getTimezoneOffset()*60000) ) + (_offF*60000) );
-
- var t;
- var str = '';
- for ( var f = 0 ; f < _flen ; f++ )
- {
- if ( this.fmt.charAt(f) != '%' )
- str += this.fmt.charAt(f);
- else
- {
- var ch = this.fmt.charAt(f+1)
- switch ( ch )
- {
- case 'a': // Abbreviated weekday name (Sun..Sat)
- str += this.dAbbr[ d.getDay() ];
- break;
- case 'B': // BCE string (eAbbr[0], usually BCE or BC, only if appropriate) (NON-MYSQL)
- if ( d.getFullYear() < 0 )
- str += this.eAbbr[0];
- break;
- case 'b': // Abbreviated month name (Jan..Dec)
- str += this.mAbbr[ d.getMonth() ];
- break;
- case 'C': // CE string (eAbbr[1], usually CE or AD, only if appropriate) (NON-MYSQL)
- if ( d.getFullYear() > 0 )
- str += this.eAbbr[1];
- break;
- case 'c': // Month, numeric (0..12)
- str += d.getMonth()+1;
- break;
- case 'd': // Day of the month, numeric (00..31)
- t = d.getDate();
- if ( t < 10 ) str += '0';
- str += String(t);
- break;
- case 'D': // Day of the month with English suffix (0th, 1st,...)
- t = String(d.getDate());
- str += t;
- if ( ( t.length == 2 ) && ( t.charAt(0) == '1' ) )
- str += 'th';
- else
- {
- switch ( t.charAt( t.length-1 ) )
- {
- case '1': str += 'st'; break;
- case '2': str += 'nd'; break;
- case '3': str += 'rd'; break;
- default: str += 'th'; break;
- }
- }
- break;
- case 'E': // era string (from eAbbr[], BCE, CE, BC or AD) (NON-MYSQL)
- str += this.eAbbr[ (d.getFullYear()<0) ? 0 : 1 ];
- break;
- case 'e': // Day of the month, numeric (0..31)
- str += d.getDate();
- break;
- case 'H': // Hour (00..23)
- t = d.getHours();
- if ( t < 10 ) str += '0';
- str += String(t);
- break;
- case 'h': // Hour (01..12)
- case 'I': // Hour (01..12)
- t = d.getHours() % 12;
- if ( t == 0 )
- str += '12';
- else
- {
- if ( t < 10 ) str += '0';
- str += String(t);
- }
- break;
- case 'i': // Minutes, numeric (00..59)
- t = d.getMinutes();
- if ( t < 10 ) str += '0';
- str += String(t);
- break;
- case 'k': // Hour (0..23)
- str += d.getHours();
- break;
- case 'l': // Hour (1..12)
- t = d.getHours() % 12;
- if ( t == 0 )
- str += '12';
- else
- str += String(t);
- break;
- case 'M': // Month name (January..December)
- str += this.mNames[ d.getMonth() ];
- break;
- case 'm': // Month, numeric (00..12)
- t = d.getMonth() + 1;
- if ( t < 10 ) str += '0';
- str += String(t);
- break;
- case 'p': // AM or PM
- str += ( ( d.getHours() < 12 ) ? 'AM' : 'PM' );
- break;
- case 'r': // Time, 12-hour (hh:mm:ss followed by AM or PM)
- t = d.getHours() % 12;
- if ( t == 0 )
- str += '12:';
- else
- {
- if ( t < 10 ) str += '0';
- str += String(t) + ':';
- }
- t = d.getMinutes();
- if ( t < 10 ) str += '0';
- str += String(t) + ':';
- t = d.getSeconds();
- if ( t < 10 ) str += '0';
- str += String(t);
- str += ( ( d.getHours() < 12 ) ? 'AM' : 'PM' );
- break;
- case 'S': // Seconds (00..59)
- case 's': // Seconds (00..59)
- t = d.getSeconds();
- if ( t < 10 ) str += '0';
- str += String(t);
- break;
- case 'T': // Time, 24-hour (hh:mm:ss)
- t = d.getHours();
- if ( t < 10 ) str += '0';
- str += String(t) + ':';
- t = d.getMinutes();
- if ( t < 10 ) str += '0';
- str += String(t) + ':';
- t = d.getSeconds();
- if ( t < 10 ) str += '0';
- str += String(t);
- break;
- case 'W': // Weekday name (Sunday..Saturday)
- str += this.dNames[ d.getDay() ];
- break;
- case 'w': // Day of the week (0=Sunday..6=Saturday)
- str += d.getDay();
- break;
- case 'Y': // Year, numeric, four digits (negative if before 0001)
- str += AnyTime.pad(d.getFullYear(),4);
- break;
- case 'y': // Year, numeric (two digits, negative if before 0001)
- t = d.getFullYear() % 100;
- str += AnyTime.pad(t,2);
- break;
- case 'Z': // Year, numeric, four digits, unsigned (NON-MYSQL)
- str += AnyTime.pad(Math.abs(d.getFullYear()),4);
- break;
- case 'z': // Year, numeric, variable length, unsigned (NON-MYSQL)
- str += Math.abs(d.getFullYear());
- break;
- case '%': // A literal '%' character
- str += '%';
- break;
- case '#': // signed timezone offset in minutes
- t = ( _offAl != Number.MIN_VALUE ) ? _offAl :
- ( _offF == Number.MIN_VALUE ) ? (0-d.getTimezoneOffset()) : _offF;
- if ( t >= 0 )
- str += '+';
- str += t;
- break;
- case '@': // timezone offset label
- t = ( _offAl != Number.MIN_VALUE ) ? _offAl :
- ( _offF == Number.MIN_VALUE ) ? (0-d.getTimezoneOffset()) : _offF;
- if ( AnyTime.utcLabel && AnyTime.utcLabel[t] )
- {
- if ( ( _offFSI > 0 ) && ( _offFSI < AnyTime.utcLabel[t].length ) )
- str += AnyTime.utcLabel[t][_offFSI];
- else
- str += AnyTime.utcLabel[t][0];
- break;
- }
- str += 'UTC';
- ch = ':'; // drop through for offset formatting
- case '+': // signed, 4-digit timezone offset in hours and minutes
- case '-': // signed, 3-or-4-digit timezone offset in hours and minutes
- case ':': // signed 4-digit timezone offset with colon delimiter
- case ';': // signed 3-or-4-digit timezone offset with colon delimiter
- t = ( _offAl != Number.MIN_VALUE ) ? _offAl :
- ( _offF == Number.MIN_VALUE ) ? (0-d.getTimezoneOffset()) : _offF;
- if ( t < 0 )
- str += '-';
- else
- str += '+';
- t = Math.abs(t);
- str += ((ch=='+')||(ch==':')) ? AnyTime.pad(Math.floor(t/60),2) : Math.floor(t/60);
- if ( (ch==':') || (ch==';') )
- str += ':';
- str += AnyTime.pad(t%60,2);
- break;
- case 'f': // Microseconds (000000..999999)
- case 'j': // Day of year (001..366)
- case 'U': // Week (00..53), where Sunday is the first day of the week
- case 'u': // Week (00..53), where Monday is the first day of the week
- case 'V': // Week (01..53), where Sunday is the first day of the week; used with %X
- case 'v': // Week (01..53), where Monday is the first day of the week; used with %x
- case 'X': // Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
- case 'x': // Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
- throw '%'+ch+' not implemented by AnyTime.Converter';
- default: // for any character not listed above
- str += this.fmt.substr(f,2);
- } // switch ( this.fmt.charAt(f+1) )
- f++;
- } // else
- } // for ( var f = 0 ; f < _flen ; f++ )
- return str;
-
- }; // AnyTime.Converter.format()
-
- //-------------------------------------------------------------------------
- // AnyTime.Converter.getUtcParseOffsetCaptured() returns the UTC offset
- // last captured by a parsed string (or assumed by utcParseOffsetAssumed).
- // It returns Number.MIN_VALUE if this object was not constructed with
- // the utcParseOffsetCapture option set to true, or if an offset was not
- // specified by the last parsed string or utcParseOffsetAssumed.
- //-------------------------------------------------------------------------
-
- this.getUtcParseOffsetCaptured = function()
- {
- return _offCap;
- };
-
- //-------------------------------------------------------------------------
- // AnyTime.Converter.getUtcParseOffsetCaptured() returns the UTC offset
- // last captured by a parsed string (or assumed by utcParseOffsetAssumed).
- // It returns Number.MIN_VALUE if this object was not constructed with
- // the utcParseOffsetCapture option set to true, or if an offset was not
- // specified by the last parsed string or utcParseOffsetAssumed.
- //-------------------------------------------------------------------------
-
- this.getUtcParseOffsetSubIndex = function()
- {
- return _offPSI;
- };
-
- //-------------------------------------------------------------------------
- // AnyTime.Converter.parse() returns a Date initialized from a specified
- // string, using the format passed to AnyTime.Converter().
- //
- // Method parameter:
- //
- // str - the String object to be converted
- //-------------------------------------------------------------------------
-
- this.parse = function( str )
- {
- _offCap = _offP;
- _offPSI = (-1);
- var era = 1;
- var time = new Date(0,0,1,0,0,0,0);
- var slen = str.length;
- var s = 0;
- var tzSign = 1, tzOff = _offP;
- var i, matched, sub, sublen, temp;
- for ( var f = 0 ; f < _flen ; f++ )
- {
- if ( this.fmt.charAt(f) == '%' )
- {
- var ch = this.fmt.charAt(f+1);
- switch ( ch )
- {
- case 'a': // Abbreviated weekday name (Sun..Sat)
- matched = false;
- for ( sublen = 0 ; s + sublen < slen ; sublen++ )
- {
- sub = str.substr(s,sublen);
- for ( i = 0 ; i < 12 ; i++ )
- if ( this.dAbbr[i] == sub )
- {
- matched = true;
- s += sublen;
- break;
- }
- if ( matched )
- break;
- } // for ( sublen ... )
- if ( ! matched )
- throw 'unknown weekday: '+str.substr(s);
- break;
- case 'B': // BCE string (eAbbr[0]), only if needed. (NON-MYSQL)
- sublen = this.eAbbr[0].length;
- if ( ( s + sublen <= slen ) && ( str.substr(s,sublen) == this.eAbbr[0] ) )
- {
- era = (-1);
- s += sublen;
- }
- break;
- case 'b': // Abbreviated month name (Jan..Dec)
- matched = false;
- for ( sublen = 0 ; s + sublen < slen ; sublen++ )
- {
- sub = str.substr(s,sublen);
- for ( i = 0 ; i < 12 ; i++ )
- if ( this.mAbbr[i] == sub )
- {
- time.setMonth( i );
- matched = true;
- s += sublen;
- break;
- }
- if ( matched )
- break;
- } // for ( sublen ... )
- if ( ! matched )
- throw 'unknown month: '+str.substr(s);
- break;
- case 'C': // CE string (eAbbr[1]), only if needed. (NON-MYSQL)
- sublen = this.eAbbr[1].length;
- if ( ( s + sublen <= slen ) && ( str.substr(s,sublen) == this.eAbbr[1] ) )
- s += sublen; // note: CE is the default era
- break;
- case 'c': // Month, numeric (0..12)
- if ( ( s+1 < slen ) && this.dAt(str,s+1) )
- {
- time.setMonth( (Number(str.substr(s,2))-1)%12 );
- s += 2;
- }
- else
- {
- time.setMonth( (Number(str.substr(s,1))-1)%12 );
- s++;
- }
- break;
- case 'D': // Day of the month with English suffix (0th,1st,...)
- if ( ( s+1 < slen ) && this.dAt(str,s+1) )
- {
- time.setDate( Number(str.substr(s,2)) );
- s += 4;
- }
- else
- {
- time.setDate( Number(str.substr(s,1)) );
- s += 3;
- }
- break;
- case 'd': // Day of the month, numeric (00..31)
- time.setDate( Number(str.substr(s,2)) );
- s += 2;
- break;
- case 'E': // era string (from eAbbr[]) (NON-MYSQL)
- sublen = this.eAbbr[0].length;
- if ( ( s + sublen <= slen ) && ( str.substr(s,sublen) == this.eAbbr[0] ) )
- {
- era = (-1);
- s += sublen;
- }
- else if ( ( s + ( sublen = this.eAbbr[1].length ) <= slen ) && ( str.substr(s,sublen) == this.eAbbr[1] ) )
- s += sublen; // note: CE is the default era
- else
- throw 'unknown era: '+str.substr(s);
- break;
- case 'e': // Day of the month, numeric (0..31)
- if ( ( s+1 < slen ) && this.dAt(str,s+1) )
- {
- time.setDate( Number(str.substr(s,2)) );
- s += 2;
- }
- else
- {
- time.setDate( Number(str.substr(s,1)) );
- s++;
- }
- break;
- case 'f': // Microseconds (000000..999999)
- s += 6; // SKIPPED!
- break;
- case 'H': // Hour (00..23)
- time.setHours( Number(str.substr(s,2)) );
- s += 2;
- break;
- case 'h': // Hour (01..12)
- case 'I': // Hour (01..12)
- time.setHours( Number(str.substr(s,2)) );
- s += 2;
- break;
- case 'i': // Minutes, numeric (00..59)
- time.setMinutes( Number(str.substr(s,2)) );
- s += 2;
- break;
- case 'k': // Hour (0..23)
- if ( ( s+1 < slen ) && this.dAt(str,s+1) )
- {
- time.setHours( Number(str.substr(s,2)) );
- s += 2;
- }
- else
- {
- time.setHours( Number(str.substr(s,1)) );
- s++;
- }
- break;
- case 'l': // Hour (1..12)
- if ( ( s+1 < slen ) && this.dAt(str,s+1) )
- {
- time.setHours( Number(str.substr(s,2)) );
- s += 2;
- }
- else
- {
- time.setHours( Number(str.substr(s,1)) );
- s++;
- }
- break;
- case 'M': // Month name (January..December)
- matched = false;
- for (sublen=_shortMon ; s + sublen <= slen ; sublen++ )
- {
- if ( sublen > _longMon )
- break;
- sub = str.substr(s,sublen);
- for ( i = 0 ; i < 12 ; i++ )
- {
- if ( this.mNames[i] == sub )
- {
- time.setMonth( i );
- matched = true;
- s += sublen;
- break;
- }
- }
- if ( matched )
- break;
- }
- break;
- case 'm': // Month, numeric (00..12)
- time.setMonth( (Number(str.substr(s,2))-1)%12 );
- s += 2;
- break;
- case 'p': // AM or PM
+ this.fmt = '%Y-%m-%d %T';
+ this.dAbbr = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
+ this.dNames = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
+ this.eAbbr = ['BCE','CE'];
+ this.mAbbr = [ 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec' ];
+ this.mNames = [ 'January','February','March','April','May','June','July','August','September','October','November','December' ];
+ this.baseYear = null;
+
+ //-------------------------------------------------------------------------
+ // AnyTime.Converter.dAt() returns true if the character in str at pos
+ // is a digit.
+ //-------------------------------------------------------------------------
+
+ this.dAt = function( str, pos )
+ {
+ return ( (str.charCodeAt(pos)>='0'.charCodeAt(0)) &&
+ (str.charCodeAt(pos)<='9'.charCodeAt(0)) );
+ };
+
+ //-------------------------------------------------------------------------
+ // AnyTime.Converter.format() returns a String containing the value
+ // of a specified Date object, using the format string passed to
+ // AnyTime.Converter().
+ //
+ // Method parameter:
+ //
+ // date - the Date object to be converted
+ //-------------------------------------------------------------------------
+
+ this.format = function( date )
+ {
+ var d = new Date(date.getTime());
+ if ( ( _offAl == Number.MIN_VALUE ) && ( _offF != Number.MIN_VALUE ) )
+ d.setTime( ( d.getTime() + (d.getTimezoneOffset()*60000) ) + (_offF*60000) );
+
+ var t;
+ var str = '';
+ for ( var f = 0 ; f < _flen ; f++ )
+ {
+ if ( this.fmt.charAt(f) != '%' )
+ str += this.fmt.charAt(f);
+ else
+ {
+ var ch = this.fmt.charAt(f+1)
+ switch ( ch )
+ {
+ case 'a': // Abbreviated weekday name (Sun..Sat)
+ str += this.dAbbr[ d.getDay() ];
+ break;
+ case 'B': // BCE string (eAbbr[0], usually BCE or BC, only if appropriate) (NON-MYSQL)
+ if ( d.getFullYear() < 0 )
+ str += this.eAbbr[0];
+ break;
+ case 'b': // Abbreviated month name (Jan..Dec)
+ str += this.mAbbr[ d.getMonth() ];
+ break;
+ case 'C': // CE string (eAbbr[1], usually CE or AD, only if appropriate) (NON-MYSQL)
+ if ( d.getFullYear() > 0 )
+ str += this.eAbbr[1];
+ break;
+ case 'c': // Month, numeric (0..12)
+ str += d.getMonth()+1;
+ break;
+ case 'd': // Day of the month, numeric (00..31)
+ t = d.getDate();
+ if ( t < 10 ) str += '0';
+ str += String(t);
+ break;
+ case 'D': // Day of the month with English suffix (0th, 1st,...)
+ t = String(d.getDate());
+ str += t;
+ if ( ( t.length == 2 ) && ( t.charAt(0) == '1' ) )
+ str += 'th';
+ else
+ {
+ switch ( t.charAt( t.length-1 ) )
+ {
+ case '1': str += 'st'; break;
+ case '2': str += 'nd'; break;
+ case '3': str += 'rd'; break;
+ default: str += 'th'; break;
+ }
+ }
+ break;
+ case 'E': // era string (from eAbbr[], BCE, CE, BC or AD) (NON-MYSQL)
+ str += this.eAbbr[ (d.getFullYear()<0) ? 0 : 1 ];
+ break;
+ case 'e': // Day of the month, numeric (0..31)
+ str += d.getDate();
+ break;
+ case 'H': // Hour (00..23)
+ t = d.getHours();
+ if ( t < 10 ) str += '0';
+ str += String(t);
+ break;
+ case 'h': // Hour (01..12)
+ case 'I': // Hour (01..12)
+ t = d.getHours() % 12;
+ if ( t == 0 )
+ str += '12';
+ else
+ {
+ if ( t < 10 ) str += '0';
+ str += String(t);
+ }
+ break;
+ case 'i': // Minutes, numeric (00..59)
+ t = d.getMinutes();
+ if ( t < 10 ) str += '0';
+ str += String(t);
+ break;
+ case 'k': // Hour (0..23)
+ str += d.getHours();
+ break;
+ case 'l': // Hour (1..12)
+ t = d.getHours() % 12;
+ if ( t == 0 )
+ str += '12';
+ else
+ str += String(t);
+ break;
+ case 'M': // Month name (January..December)
+ str += this.mNames[ d.getMonth() ];
+ break;
+ case 'm': // Month, numeric (00..12)
+ t = d.getMonth() + 1;
+ if ( t < 10 ) str += '0';
+ str += String(t);
+ break;
+ case 'p': // AM or PM
+ str += ( ( d.getHours() < 12 ) ? 'AM' : 'PM' );
+ break;
+ case 'r': // Time, 12-hour (hh:mm:ss followed by AM or PM)
+ t = d.getHours() % 12;
+ if ( t == 0 )
+ str += '12:';
+ else
+ {
+ if ( t < 10 ) str += '0';
+ str += String(t) + ':';
+ }
+ t = d.getMinutes();
+ if ( t < 10 ) str += '0';
+ str += String(t) + ':';
+ t = d.getSeconds();
+ if ( t < 10 ) str += '0';
+ str += String(t);
+ str += ( ( d.getHours() < 12 ) ? 'AM' : 'PM' );
+ break;
+ case 'S': // Seconds (00..59)
+ case 's': // Seconds (00..59)
+ t = d.getSeconds();
+ if ( t < 10 ) str += '0';
+ str += String(t);
+ break;
+ case 'T': // Time, 24-hour (hh:mm:ss)
+ t = d.getHours();
+ if ( t < 10 ) str += '0';
+ str += String(t) + ':';
+ t = d.getMinutes();
+ if ( t < 10 ) str += '0';
+ str += String(t) + ':';
+ t = d.getSeconds();
+ if ( t < 10 ) str += '0';
+ str += String(t);
+ break;
+ case 'W': // Weekday name (Sunday..Saturday)
+ str += this.dNames[ d.getDay() ];
+ break;
+ case 'w': // Day of the week (0=Sunday..6=Saturday)
+ str += d.getDay();
+ break;
+ case 'Y': // Year, numeric, four digits (negative if before 0001)
+ str += AnyTime.pad(d.getFullYear(),4);
+ break;
+ case 'y': // Year, numeric (two digits, negative if before 0001)
+ t = d.getFullYear() % 100;
+ str += AnyTime.pad(t,2);
+ break;
+ case 'Z': // Year, numeric, four digits, unsigned (NON-MYSQL)
+ str += AnyTime.pad(Math.abs(d.getFullYear()),4);
+ break;
+ case 'z': // Year, numeric, variable length, unsigned (NON-MYSQL)
+ str += Math.abs(d.getFullYear());
+ break;
+ case '%': // A literal '%' character
+ str += '%';
+ break;
+ case '#': // signed timezone offset in minutes
+ t = ( _offAl != Number.MIN_VALUE ) ? _offAl :
+ ( _offF == Number.MIN_VALUE ) ? (0-d.getTimezoneOffset()) : _offF;
+ if ( t >= 0 )
+ str += '+';
+ str += t;
+ break;
+ case '@': // timezone offset label
+ t = ( _offAl != Number.MIN_VALUE ) ? _offAl :
+ ( _offF == Number.MIN_VALUE ) ? (0-d.getTimezoneOffset()) : _offF;
+ if ( AnyTime.utcLabel && AnyTime.utcLabel[t] )
+ {
+ if ( ( _offFSI > 0 ) && ( _offFSI < AnyTime.utcLabel[t].length ) )
+ str += AnyTime.utcLabel[t][_offFSI];
+ else
+ str += AnyTime.utcLabel[t][0];
+ break;
+ }
+ str += 'UTC';
+ ch = ':'; // drop through for offset formatting
+ case '+': // signed, 4-digit timezone offset in hours and minutes
+ case '-': // signed, 3-or-4-digit timezone offset in hours and minutes
+ case ':': // signed 4-digit timezone offset with colon delimiter
+ case ';': // signed 3-or-4-digit timezone offset with colon delimiter
+ t = ( _offAl != Number.MIN_VALUE ) ? _offAl :
+ ( _offF == Number.MIN_VALUE ) ? (0-d.getTimezoneOffset()) : _offF;
+ if ( t < 0 )
+ str += '-';
+ else
+ str += '+';
+ t = Math.abs(t);
+ str += ((ch=='+')||(ch==':')) ? AnyTime.pad(Math.floor(t/60),2) : Math.floor(t/60);
+ if ( (ch==':') || (ch==';') )
+ str += ':';
+ str += AnyTime.pad(t%60,2);
+ break;
+ case 'f': // Microseconds (000000..999999)
+ case 'j': // Day of year (001..366)
+ case 'U': // Week (00..53), where Sunday is the first day of the week
+ case 'u': // Week (00..53), where Monday is the first day of the week
+ case 'V': // Week (01..53), where Sunday is the first day of the week; used with %X
+ case 'v': // Week (01..53), where Monday is the first day of the week; used with %x
+ case 'X': // Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
+ case 'x': // Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
+ throw '%'+ch+' not implemented by AnyTime.Converter';
+ default: // for any character not listed above
+ str += this.fmt.substr(f,2);
+ } // switch ( this.fmt.charAt(f+1) )
+ f++;
+ } // else
+ } // for ( var f = 0 ; f < _flen ; f++ )
+ return str;
+
+ }; // AnyTime.Converter.format()
+
+ //-------------------------------------------------------------------------
+ // AnyTime.Converter.getUtcParseOffsetCaptured() returns the UTC offset
+ // last captured by a parsed string (or assumed by utcParseOffsetAssumed).
+ // It returns Number.MIN_VALUE if this object was not constructed with
+ // the utcParseOffsetCapture option set to true, or if an offset was not
+ // specified by the last parsed string or utcParseOffsetAssumed.
+ //-------------------------------------------------------------------------
+
+ this.getUtcParseOffsetCaptured = function()
+ {
+ return _offCap;
+ };
+
+ //-------------------------------------------------------------------------
+ // AnyTime.Converter.getUtcParseOffsetCaptured() returns the UTC offset
+ // last captured by a parsed string (or assumed by utcParseOffsetAssumed).
+ // It returns Number.MIN_VALUE if this object was not constructed with
+ // the utcParseOffsetCapture option set to true, or if an offset was not
+ // specified by the last parsed string or utcParseOffsetAssumed.
+ //-------------------------------------------------------------------------
+
+ this.getUtcParseOffsetSubIndex = function()
+ {
+ return _offPSI;
+ };
+
+ //-------------------------------------------------------------------------
+ // AnyTime.Converter.parse() returns a Date initialized from a specified
+ // string, using the format passed to AnyTime.Converter().
+ //
+ // Method parameter:
+ //
+ // str - the String object to be converted
+ //-------------------------------------------------------------------------
+
+ this.parse = function( str )
+ {
+ _offCap = _offP;
+ _offPSI = (-1);
+ var era = 1;
+ var time = new Date(4,0,1,0,0,0,0);//4=leap year bug
+ var slen = str.length;
+ var s = 0;
+ var tzSign = 1, tzOff = _offP;
+ var i, matched, sub, sublen, temp;
+ for ( var f = 0 ; f < _flen ; f++ )
+ {
+ if ( this.fmt.charAt(f) == '%' )
+ {
+ var ch = this.fmt.charAt(f+1);
+ switch ( ch )
+ {
+ case 'a': // Abbreviated weekday name (Sun..Sat)
+ matched = false;
+ for ( sublen = 0 ; s + sublen < slen ; sublen++ )
+ {
+ sub = str.substr(s,sublen);
+ for ( i = 0 ; i < 12 ; i++ )
+ if ( this.dAbbr[i] == sub )
+ {
+ matched = true;
+ s += sublen;
+ break;
+ }
+ if ( matched )
+ break;
+ } // for ( sublen ... )
+ if ( ! matched )
+ throw 'unknown weekday: '+str.substr(s);
+ break;
+ case 'B': // BCE string (eAbbr[0]), only if needed. (NON-MYSQL)
+ sublen = this.eAbbr[0].length;
+ if ( ( s + sublen <= slen ) && ( str.substr(s,sublen) == this.eAbbr[0] ) )
+ {
+ era = (-1);
+ s += sublen;
+ }
+ break;
+ case 'b': // Abbreviated month name (Jan..Dec)
+ matched = false;
+ for ( sublen = 0 ; s + sublen < slen ; sublen++ )
+ {
+ sub = str.substr(s,sublen);
+ for ( i = 0 ; i < 12 ; i++ )
+ if ( this.mAbbr[i] == sub )
+ {
+ time.setMonth( i );
+ matched = true;
+ s += sublen;
+ break;
+ }
+ if ( matched )
+ break;
+ } // for ( sublen ... )
+ if ( ! matched )
+ throw 'unknown month: '+str.substr(s);
+ break;
+ case 'C': // CE string (eAbbr[1]), only if needed. (NON-MYSQL)
+ sublen = this.eAbbr[1].length;
+ if ( ( s + sublen <= slen ) && ( str.substr(s,sublen) == this.eAbbr[1] ) )
+ s += sublen; // note: CE is the default era
+ break;
+ case 'c': // Month, numeric (0..12)
+ if ( ( s+1 < slen ) && this.dAt(str,s+1) )
+ {
+ time.setMonth( (Number(str.substr(s,2))-1)%12 );
+ s += 2;
+ }
+ else
+ {
+ time.setMonth( (Number(str.substr(s,1))-1)%12 );
+ s++;
+ }
+ break;
+ case 'D': // Day of the month with English suffix (0th,1st,...)
+ if ( ( s+1 < slen ) && this.dAt(str,s+1) )
+ {
+ time.setDate( Number(str.substr(s,2)) );
+ s += 4;
+ }
+ else
+ {
+ time.setDate( Number(str.substr(s,1)) );
+ s += 3;
+ }
+ break;
+ case 'd': // Day of the month, numeric (00..31)
+ time.setDate( Number(str.substr(s,2)) );
+ s += 2;
+ break;
+ case 'E': // era string (from eAbbr[]) (NON-MYSQL)
+ sublen = this.eAbbr[0].length;
+ if ( ( s + sublen <= slen ) && ( str.substr(s,sublen) == this.eAbbr[0] ) )
+ {
+ era = (-1);
+ s += sublen;
+ }
+ else if ( ( s + ( sublen = this.eAbbr[1].length ) <= slen ) && ( str.substr(s,sublen) == this.eAbbr[1] ) )
+ s += sublen; // note: CE is the default era
+ else
+ throw 'unknown era: '+str.substr(s);
+ break;
+ case 'e': // Day of the month, numeric (0..31)
+ if ( ( s+1 < slen ) && this.dAt(str,s+1) )
+ {
+ time.setDate( Number(str.substr(s,2)) );
+ s += 2;
+ }
+ else
+ {
+ time.setDate( Number(str.substr(s,1)) );
+ s++;
+ }
+ break;
+ case 'f': // Microseconds (000000..999999)
+ s += 6; // SKIPPED!
+ break;
+ case 'H': // Hour (00..23)
+ time.setHours( Number(str.substr(s,2)) );
+ s += 2;
+ break;
+ case 'h': // Hour (01..12)
+ case 'I': // Hour (01..12)
+ time.setHours( Number(str.substr(s,2)) );
+ s += 2;
+ break;
+ case 'i': // Minutes, numeric (00..59)
+ time.setMinutes( Number(str.substr(s,2)) );
+ s += 2;
+ break;
+ case 'k': // Hour (0..23)
+ if ( ( s+1 < slen ) && this.dAt(str,s+1) )
+ {
+ time.setHours( Number(str.substr(s,2)) );
+ s += 2;
+ }
+ else
+ {
+ time.setHours( Number(str.substr(s,1)) );
+ s++;
+ }
+ break;
+ case 'l': // Hour (1..12)
+ if ( ( s+1 < slen ) && this.dAt(str,s+1) )
+ {
+ time.setHours( Number(str.substr(s,2)) );
+ s += 2;
+ }
+ else
+ {
+ time.setHours( Number(str.substr(s,1)) );
+ s++;
+ }
+ break;
+ case 'M': // Month name (January..December)
+ matched = false;
+ for (sublen=_shortMon ; s + sublen <= slen ; sublen++ )
+ {
+ if ( sublen > _longMon )
+ break;
+ sub = str.substr(s,sublen);
+ for ( i = 0 ; i < 12 ; i++ )
+ {
+ if ( this.mNames[i] == sub )
+ {
+ time.setMonth( i );
+ matched = true;
+ s += sublen;
+ break;
+ }
+ }
+ if ( matched )
+ break;
+ }
+ break;
+ case 'm': // Month, numeric (00..12)
+ time.setMonth( (Number(str.substr(s,2))-1)%12 );
+ s += 2;
+ break;
+ case 'p': // AM or PM
if ( time.getHours() == 12 )
{
- if ( str.charAt(s) == 'A' )
- time.setHours(0);
+ if ( str.charAt(s) == 'A' )
+ time.setHours(0);
}
else if ( str.charAt(s) == 'P' )
- time.setHours( time.getHours() + 12 );
- s += 2;
- break;
- case 'r': // Time, 12-hour (hh:mm:ss followed by AM or PM)
- time.setHours(Number(str.substr(s,2)));
- time.setMinutes(Number(str.substr(s+3,2)));
- time.setSeconds(Number(str.substr(s+6,2)));
+ time.setHours( time.getHours() + 12 );
+ s += 2;
+ break;
+ case 'r': // Time, 12-hour (hh:mm:ss followed by AM or PM)
+ time.setHours(Number(str.substr(s,2)));
+ time.setMinutes(Number(str.substr(s+3,2)));
+ time.setSeconds(Number(str.substr(s+6,2)));
if ( time.getHours() == 12 )
{
- if ( str.charAt(s) == 'A' )
- time.setHours(0);
+ if ( str.charAt(s) == 'A' )
+ time.setHours(0);
}
else if ( str.charAt(s) == 'P' )
- time.setHours( time.getHours() + 12 );
- s += 10;
- break;
- case 'S': // Seconds (00..59)
- case 's': // Seconds (00..59)
- time.setSeconds(Number(str.substr(s,2)));
- s += 2;
- break;
- case 'T': // Time, 24-hour (hh:mm:ss)
- time.setHours(Number(str.substr(s,2)));
- time.setMinutes(Number(str.substr(s+3,2)));
- time.setSeconds(Number(str.substr(s+6,2)));
- s += 8;
- break;
- case 'W': // Weekday name (Sunday..Saturday)
- matched = false;
- for (sublen=_shortDay ; s + sublen <= slen ; sublen++ )
- {
- if ( sublen > _longDay )
- break;
- sub = str.substr(s,sublen);
- for ( i = 0 ; i < 7 ; i++ )
- {
- if ( this.dNames[i] == sub )
- {
- matched = true;
- s += sublen;
- break;
- }
- }
- if ( matched )
- break;
- }
- break;
+ time.setHours( time.getHours() + 12 );
+ s += 10;
+ break;
+ case 'S': // Seconds (00..59)
+ case 's': // Seconds (00..59)
+ time.setSeconds(Number(str.substr(s,2)));
+ s += 2;
+ break;
+ case 'T': // Time, 24-hour (hh:mm:ss)
+ time.setHours(Number(str.substr(s,2)));
+ time.setMinutes(Number(str.substr(s+3,2)));
+ time.setSeconds(Number(str.substr(s+6,2)));
+ s += 8;
+ break;
+ case 'W': // Weekday name (Sunday..Saturday)
+ matched = false;
+ for (sublen=_shortDay ; s + sublen <= slen ; sublen++ )
+ {
+ if ( sublen > _longDay )
+ break;
+ sub = str.substr(s,sublen);
+ for ( i = 0 ; i < 7 ; i++ )
+ {
+ if ( this.dNames[i] == sub )
+ {
+ matched = true;
+ s += sublen;
+ break;
+ }
+ }
+ if ( matched )
+ break;
+ }
+ break;
case 'w': // Day of the week (0=Sunday..6=Saturday) (ignored)
s += 1;
break;
- case 'Y': // Year, numeric, four digits, negative if before 0001
- i = 4;
- if ( str.substr(s,1) == '-' )
- i++;
- time.setFullYear(Number(str.substr(s,i)));
- s += i;
- break;
- case 'y': // Year, numeric (two digits), negative before baseYear
- i = 2;
- if ( str.substr(s,1) == '-' )
- i++;
- temp = Number(str.substr(s,i));
- if ( typeof(this.baseYear) == 'number' )
- temp += this.baseYear;
- else if ( temp < 70 )
- temp += 2000;
- else
- temp += 1900;
- time.setFullYear(temp);
- s += i;
- break;
- case 'Z': // Year, numeric, four digits, unsigned (NON-MYSQL)
- time.setFullYear(Number(str.substr(s,4)));
- s += 4;
- break;
- case 'z': // Year, numeric, variable length, unsigned (NON-MYSQL)
- i = 0;
- while ( ( s < slen ) && this.dAt(str,s) )
- i = ( i * 10 ) + Number(str.charAt(s++));
- time.setFullYear(i);
- break;
- case '#': // signed timezone offset in minutes.
- if ( str.charAt(s++) == '-' )
- tzSign = (-1);
- for ( tzOff = 0 ; ( s < slen ) && (String(i=Number(str.charAt(s)))==str.charAt(s)) ; s++ )
- tzOff = ( tzOff * 10 ) + i;
- tzOff *= tzSign;
- break;
- case '@': // timezone label
- _offPSI = (-1);
- if ( AnyTime.utcLabel )
- {
- matched = false;
- for ( tzOff in AnyTime.utcLabel )
+ case 'Y': // Year, numeric, four digits, negative if before 0001
+ i = 4;
+ if ( str.substr(s,1) == '-' )
+ i++;
+ time.setFullYear(Number(str.substr(s,i)));
+ s += i;
+ break;
+ case 'y': // Year, numeric (two digits), negative before baseYear
+ i = 2;
+ if ( str.substr(s,1) == '-' )
+ i++;
+ temp = Number(str.substr(s,i));
+ if ( typeof(this.baseYear) == 'number' )
+ temp += this.baseYear;
+ else if ( temp < 70 )
+ temp += 2000;
+ else
+ temp += 1900;
+ time.setFullYear(temp);
+ s += i;
+ break;
+ case 'Z': // Year, numeric, four digits, unsigned (NON-MYSQL)
+ time.setFullYear(Number(str.substr(s,4)));
+ s += 4;
+ break;
+ case 'z': // Year, numeric, variable length, unsigned (NON-MYSQL)
+ i = 0;
+ while ( ( s < slen ) && this.dAt(str,s) )
+ i = ( i * 10 ) + Number(str.charAt(s++));
+ time.setFullYear(i);
+ break;
+ case '#': // signed timezone offset in minutes.
+ if ( str.charAt(s++) == '-' )
+ tzSign = (-1);
+ for ( tzOff = 0 ; ( s < slen ) && (String(i=Number(str.charAt(s)))==str.charAt(s)) ; s++ )
+ tzOff = ( tzOff * 10 ) + i;
+ tzOff *= tzSign;
+ break;
+ case '@': // timezone label
+ _offPSI = (-1);
+ if ( AnyTime.utcLabel )
+ {
+ matched = false;
+ for ( tzOff in AnyTime.utcLabel )
if ( ! Array.prototype[tzOff] ) // prototype.js compatibility issue
- {
- for ( i = 0 ; i < AnyTime.utcLabel[tzOff].length ; i++ )
- {
- sub = AnyTime.utcLabel[tzOff][i];
- sublen = sub.length;
- if ( ( s+sublen <= slen ) && ( str.substr(s,sublen) == sub ) )
- {
+ {
+ for ( i = 0 ; i < AnyTime.utcLabel[tzOff].length ; i++ )
+ {
+ sub = AnyTime.utcLabel[tzOff][i];
+ sublen = sub.length;
+ if ( ( s+sublen <= slen ) && ( str.substr(s,sublen) == sub ) )
+ {
s+=sublen;
- matched = true;
- break;
- }
- }
- if ( matched )
- break;
- }
- if ( matched )
- {
- _offPSI = i;
- tzOff = Number(tzOff);
- break; // case
- }
- }
- if ( ( s+9 < slen ) || ( str.substr(s,3) != "UTC" ) )
+ matched = true;
+ break;
+ }
+ }
+ if ( matched )
+ break;
+ }
+ if ( matched )
+ {
+ _offPSI = i;
+ tzOff = Number(tzOff);
+ break; // case
+ }
+ }
+ if ( ( s+9 < slen ) || ( str.substr(s,3) != "UTC" ) )
throw 'unknown time zone: '+str.substr(s);
- s += 3;
- ch = ':'; // drop through for offset parsing
- case '-': // signed, 3-or-4-digit timezone offset in hours and minutes
- case '+': // signed, 4-digit timezone offset in hours and minutes
- case ':': // signed 4-digit timezone offset with colon delimiter
- case ';': // signed 3-or-4-digit timezone offset with colon delimiter
- if ( str.charAt(s++) == '-' )
- tzSign = (-1);
- tzOff = Number(str.charAt(s));
- if ( (ch=='+')||(ch==':')||((s+3<slen)&&(String(Number(str.charAt(s+3)))!==str.charAt(s+3))) )
- tzOff = (tzOff*10) + Number(str.charAt(++s));
+ s += 3;
+ ch = ':'; // drop through for offset parsing
+ case '-': // signed, 3-or-4-digit timezone offset in hours and minutes
+ case '+': // signed, 4-digit timezone offset in hours and minutes
+ case ':': // signed 4-digit timezone offset with colon delimiter
+ case ';': // signed 3-or-4-digit timezone offset with colon delimiter
+ if ( str.charAt(s++) == '-' )
+ tzSign = (-1);
+ tzOff = Number(str.charAt(s));
+ if ( (ch=='+')||(ch==':')||((s+3<slen)&&(String(Number(str.charAt(s+3)))!==str.charAt(s+3))) )
+ tzOff = (tzOff*10) + Number(str.charAt(++s));
tzOff *= 60;
- if ( (ch==':') || (ch==';') )
- s++; // skip ":" (assumed)
- tzOff = ( tzOff + Number(str.substr(++s,2)) ) * tzSign;
- s += 2;
- break;
- case 'j': // Day of year (001..366)
- case 'U': // Week (00..53), where Sunday is the first day of the week
- case 'u': // Week (00..53), where Monday is the first day of the week
- case 'V': // Week (01..53), where Sunday is the first day of the week; used with %X
- case 'v': // Week (01..53), where Monday is the first day of the week; used with %x
- case 'X': // Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
- case 'x': // Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
- throw '%'+this.fmt.charAt(f+1)+' not implemented by AnyTime.Converter';
- case '%': // A literal '%' character
- default: // for any character not listed above
- throw '%'+this.fmt.charAt(f+1)+' reserved for future use';
- break;
- }
- f++;
- } // if ( this.fmt.charAt(f) == '%' )
- else if ( this.fmt.charAt(f) != str.charAt(s) )
- throw str + ' is not in "' + this.fmt + '" format';
- else
- s++;
- } // for ( var f ... )
- if ( era < 0 )
- time.setFullYear( 0 - time.getFullYear() );
- if ( tzOff != Number.MIN_VALUE )
- {
- if ( _captureOffset )
- _offCap = tzOff;
- else
- time.setTime( ( time.getTime() - (tzOff*60000) ) - (time.getTimezoneOffset()*60000) );
- }
-
- return time;
-
- }; // AnyTime.Converter.parse()
-
- //-------------------------------------------------------------------------
- // AnyTime.Converter.setUtcFormatOffsetAlleged() sets the offset from
+ if ( (ch==':') || (ch==';') )
+ s++; // skip ":" (assumed)
+ tzOff = ( tzOff + Number(str.substr(++s,2)) ) * tzSign;
+ s += 2;
+ break;
+ case 'j': // Day of year (001..366)
+ case 'U': // Week (00..53), where Sunday is the first day of the week
+ case 'u': // Week (00..53), where Monday is the first day of the week
+ case 'V': // Week (01..53), where Sunday is the first day of the week; used with %X
+ case 'v': // Week (01..53), where Monday is the first day of the week; used with %x
+ case 'X': // Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
+ case 'x': // Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
+ throw '%'+this.fmt.charAt(f+1)+' not implemented by AnyTime.Converter';
+ case '%': // A literal '%' character
+ default: // for any character not listed above
+ throw '%'+this.fmt.charAt(f+1)+' reserved for future use';
+ break;
+ }
+ f++;
+ } // if ( this.fmt.charAt(f) == '%' )
+ else if ( this.fmt.charAt(f) != str.charAt(s) )
+ throw str + ' is not in "' + this.fmt + '" format';
+ else
+ s++;
+ } // for ( var f ... )
+ if ( era < 0 )
+ time.setFullYear( 0 - time.getFullYear() );
+ if ( tzOff != Number.MIN_VALUE )
+ {
+ if ( _captureOffset )
+ _offCap = tzOff;
+ else
+ time.setTime( ( time.getTime() - (tzOff*60000) ) - (time.getTimezoneOffset()*60000) );
+ }
+
+ return time;
+
+ }; // AnyTime.Converter.parse()
+
+ //-------------------------------------------------------------------------
+ // AnyTime.Converter.setUtcFormatOffsetAlleged() sets the offset from
// UTC, in minutes, to claim that a Date object represents during
- // formatting, even though it is formatted using local time. This merely
- // reports the alleged offset when a timezone specifier (%#, %+, %-, %:,
- // %; or %@) is encountered in the format string--it does not otherwise
- // affect the date/time value. This primarily exists so AnyTime.picker
- // can edit the time as specified (without conversion to local time) and
- // then convert the edited time to a different time zone (as selected
- // using the picker). This method returns the previous value, if any,
- // set by the utcFormatOffsetAlleged option, or a previous call to
- // setUtcFormatOffsetAlleged(), or Number.MIN_VALUE if no offset was
- // previously-alleged. Call this method with Number.MIN_VALUE to cancel
- // any prior value. Note that if a format offset is alleged, any offset
- // specified by option utcFormatOffsetImposed is ignored.
- //-------------------------------------------------------------------------
-
- this.setUtcFormatOffsetAlleged = function( offset )
- {
- var prev = _offAl;
- _offAl = offset;
- return prev;
- };
-
- //-------------------------------------------------------------------------
- // AnyTime.Converter.setUtcFormatOffsetSubIndex() sets the sub-index
- // to choose from the AnyTime.utcLabel array of arrays when formatting
- // a Date using the %@ specifier. For more information, see option
- // AnyTime.Converter.utcFormatOffsetSubIndex. This primarily exists so
- // AnyTime.picker can specify the Time Zone label selected using the
- // picker). This method returns the previous value, if any, set by the
- // utcFormatOffsetSubIndex option, or a previous call to
- // setUtcFormatOffsetAlleged(), or (-1) if no sub-index was previously-
- // chosen. Call this method with (-1) to cancel any prior value.
- //-------------------------------------------------------------------------
-
- this.setUtcFormatOffsetSubIndex = function( subIndex )
- {
- var prev = _offFSI;
- _offFSI = subIndex;
- return prev;
- };
-
- //-------------------------------------------------------------------------
- // AnyTime.Converter construction code:
- //-------------------------------------------------------------------------
-
- (function(_this)
- {
+ // formatting, even though it is formatted using local time. This merely
+ // reports the alleged offset when a timezone specifier (%#, %+, %-, %:,
+ // %; or %@) is encountered in the format string--it does not otherwise
+ // affect the date/time value. This primarily exists so AnyTime.picker
+ // can edit the time as specified (without conversion to local time) and
+ // then convert the edited time to a different time zone (as selected
+ // using the picker). This method returns the previous value, if any,
+ // set by the utcFormatOffsetAlleged option, or a previous call to
+ // setUtcFormatOffsetAlleged(), or Number.MIN_VALUE if no offset was
+ // previously-alleged. Call this method with Number.MIN_VALUE to cancel
+ // any prior value. Note that if a format offset is alleged, any offset
+ // specified by option utcFormatOffsetImposed is ignored.
+ //-------------------------------------------------------------------------
+
+ this.setUtcFormatOffsetAlleged = function( offset )
+ {
+ var prev = _offAl;
+ _offAl = offset;
+ return prev;
+ };
+
+ //-------------------------------------------------------------------------
+ // AnyTime.Converter.setUtcFormatOffsetSubIndex() sets the sub-index
+ // to choose from the AnyTime.utcLabel array of arrays when formatting
+ // a Date using the %@ specifier. For more information, see option
+ // AnyTime.Converter.utcFormatOffsetSubIndex. This primarily exists so
+ // AnyTime.picker can specify the Time Zone label selected using the
+ // picker). This method returns the previous value, if any, set by the
+ // utcFormatOffsetSubIndex option, or a previous call to
+ // setUtcFormatOffsetAlleged(), or (-1) if no sub-index was previously-
+ // chosen. Call this method with (-1) to cancel any prior value.
+ //-------------------------------------------------------------------------
+
+ this.setUtcFormatOffsetSubIndex = function( subIndex )
+ {
+ var prev = _offFSI;
+ _offFSI = subIndex;
+ return prev;
+ };
+
+ //-------------------------------------------------------------------------
+ // AnyTime.Converter construction code:
+ //-------------------------------------------------------------------------
+
+ (function(_this)
+ {
var i, len;
-
- options = jQuery.extend(true,{},options||{});
-
- if ( options.baseYear )
- _this.baseYear = Number(options.baseYear);
-
- if ( options.format )
- _this.fmt = options.format;
-
- _flen = _this.fmt.length;
-
- if ( options.dayAbbreviations )
- _this.dAbbr = $.makeArray( options.dayAbbreviations );
-
- if ( options.dayNames )
- {
- _this.dNames = $.makeArray( options.dayNames );
- _longDay = 1;
- _shortDay = 1000;
- for ( i = 0 ; i < 7 ; i++ )
- {
+
+ options = jQuery.extend(true,{},options||{});
+
+ if ( options.baseYear )
+ _this.baseYear = Number(options.baseYear);
+
+ if ( options.format )
+ _this.fmt = options.format;
+
+ _flen = _this.fmt.length;
+
+ if ( options.dayAbbreviations )
+ _this.dAbbr = $.makeArray( options.dayAbbreviations );
+
+ if ( options.dayNames )
+ {
+ _this.dNames = $.makeArray( options.dayNames );
+ _longDay = 1;
+ _shortDay = 1000;
+ for ( i = 0 ; i < 7 ; i++ )
+ {
len = _this.dNames[i].length;
- if ( len > _longDay )
- _longDay = len;
- if ( len < _shortDay )
- _shortDay = len;
- }
- }
-
- if ( options.eraAbbreviations )
- _this.eAbbr = $.makeArray(options.eraAbbreviations);
-
- if ( options.monthAbbreviations )
- _this.mAbbr = $.makeArray(options.monthAbbreviations);
-
- if ( options.monthNames )
- {
- _this.mNames = $.makeArray( options.monthNames );
- _longMon = 1;
- _shortMon = 1000;
- for ( i = 0 ; i < 12 ; i++ )
- {
- var len = _this.mNames[i].length;
- if ( len > _longMon )
- _longMon = len;
- if ( len < _shortMon )
- _shortMon = len;
- }
- }
-
- if ( typeof options.utcFormatOffsetImposed != "undefined" )
- _offF = options.utcFormatOffsetImposed;
+ if ( len > _longDay )
+ _longDay = len;
+ if ( len < _shortDay )
+ _shortDay = len;
+ }
+ }
+
+ if ( options.eraAbbreviations )
+ _this.eAbbr = $.makeArray(options.eraAbbreviations);
+
+ if ( options.monthAbbreviations )
+ _this.mAbbr = $.makeArray(options.monthAbbreviations);
+
+ if ( options.monthNames )
+ {
+ _this.mNames = $.makeArray( options.monthNames );
+ _longMon = 1;
+ _shortMon = 1000;
+ for ( i = 0 ; i < 12 ; i++ )
+ {
+ len = _this.mNames[i].length;
+ if ( len > _longMon )
+ _longMon = len;
+ if ( len < _shortMon )
+ _shortMon = len;
+ }
+ }
+
+ if ( typeof options.utcFormatOffsetImposed != "undefined" )
+ _offF = options.utcFormatOffsetImposed;
- if ( typeof options.utcParseOffsetAssumed != "undefined" )
- _offP = options.utcParseOffsetAssumed;
-
- if ( options.utcParseOffsetCapture )
- _captureOffset = true;
-
- })(this); // AnyTime.Converter construction
+ if ( typeof options.utcParseOffsetAssumed != "undefined" )
+ _offP = options.utcParseOffsetAssumed;
+
+ if ( options.utcParseOffsetCapture )
+ _captureOffset = true;
+
+ })(this); // AnyTime.Converter construction
}; // AnyTime.Converter =
//=============================================================================
// AnyTime.noPicker()
@@ -1132,25 +1132,25 @@
// Removes the date/time entry picker attached to a specified text field.
//=============================================================================
AnyTime.noPicker = function( id )
{
- if ( __pickers[id] )
- {
- __pickers[id].cleanup();
- delete __pickers[id];
- }
+ if ( __pickers[id] )
+ {
+ __pickers[id].cleanup();
+ delete __pickers[id];
+ }
};
//=============================================================================
// AnyTime.picker()
//
// Creates a date/time entry picker attached to a specified text field.
// Instead of entering a date and/or time into the text field, the user
// selects legal combinations using the picker, and the field is auto-
// matically populated. The picker can be incorporated into the page
-// "inline", or used as a "popup" that appears when the text field is
+// "inline", or used as a "popup" that appears when the text field is
// clicked and disappears when the picker is dismissed. Ajax can be used
// to send the selected value to a server to approve or veto it.
//
// To create a picker, simply include the necessary files in an HTML page
// and call the function for each date/time input field. The following
@@ -1164,11 +1164,11 @@
// <input type="text" id="foo" tabindex="1" value="1967-07-30 23:45" />
// <input type="text" id="bar" tabindex="2" value="01/06/90" />
// <script type="text/javascript">
// AnyTime.picker( "foo" );
// AnyTime.picker( "bar", { placement:"inline", format: "%m/%d/%y",
-// ajaxOptions { url: "/some/server/page/" } } );
+// ajaxOptions { url: "/some/server/page/" } } );
// </script>
//
// The appearance of the picker can be extensively modified using CSS styles.
// A default appearance can be achieved by the "anytime.css" stylesheet that
// accompanies this script. The default style looks better in browsers other
@@ -1297,2369 +1297,2373 @@
// and which "buttons" to include, is inferred from the format string.
//=============================================================================
AnyTime.picker = function( id, options )
{
- // Create a new private object instance to manage the picker,
- // if one does not already exist.
-
+ // Create a new private object instance to manage the picker,
+ // if one does not already exist.
+
if ( __pickers[id] )
- throw 'Cannot create another AnyTime picker for "'+id+'"';
+ throw 'Cannot create another AnyTime picker for "'+id+'"';
- var _this = null;
+ var _this = null;
- __pickers[id] =
- {
- // private members
-
- twelveHr: false,
- ajaxOpts: null, // options for AJAX requests
- denyTab: true, // set to true to stop Opera from tabbing away
- askEra: false, // prompt the user for the era in yDiv?
- cloak: null, // cloak div
- conv: null, // AnyTime.Converter
- bMinW: 0, // min width of body div
- bMinH: 0, // min height of body div
- dMinW: 0, // min width of date div
- dMinH: 0, // min height of date div
- div: null, // picker div
- dB: null, // body div
- dD: null, // date div
- dY: null, // years div
- dMo: null, // months div
- dDoM: null, // date-of-month table
- hDoM: null, // date-of-month heading
- hMo: null, // month heading
- hTitle: null, // title heading
- hY: null, // year heading
- dT: null, // time div
- dH: null, // hours div
- dM: null, // minutes div
- dS: null, // seconds div
- dO: null, // offset (time zone) div
- earliest: null, // earliest selectable date/time
- fBtn: null, // button with current focus
- fDOW: 0, // index to use as first day-of-week
- hBlur: null, // input handler
- hClick: null, // input handler
- hFocus: null, // input handler
- hKeydown: null, // input handler
- hKeypress: null, // input handler
- id: null, // picker ID
- inp: null, // input text field
- latest: null, // latest selectable date/time
- lastAjax: null, // last value submitted using AJAX
- lostFocus: false, // when focus is lost, must redraw
- lX: 'X', // label for dismiss button
- lY: 'Year', // label for year
- lO: 'Time Zone', // label for UTC offset (time zone)
- oBody: null, // UTC offset selector popup
- oConv: null, // AnyTime.Converter for offset display
- oCur: null, // current-UTC-offset button
- oDiv: null, // UTC offset selector popup
- oLab: null, // UTC offset label
- oListMinW: 0, // min width of offset list element
- oMinW: 0, // min width of UTC offset element
- oSel: null, // select (plus/minus) UTC-offset button
- offMin: Number.MIN_VALUE, // current UTC offset in minutes
- offSI: -1, // current UTC label sub-index (if any)
- offStr: "", // current UTC offset (time zone) string
- pop: true, // picker is a popup?
- time: null, // current date/time
- tMinW: 0, // min width of time div
- tMinH: 0, // min height of time div
- url: null, // URL to submit value using AJAX
- wMinW: 0, // min width of picker
- wMinH: 0, // min height of picker
- yAhead: null, // years-ahead button
- y0XXX: null, // millenium-digit-zero button (for focus)
- yCur: null, // current-year button
- yDiv: null, // year selector popup
- yLab: null, // year label
- yNext: null, // next-year button
- yPast: null, // years-past button
- yPrior: null, // prior-year button
+ __pickers[id] =
+ {
+ // private members
+
+ twelveHr: false,
+ ajaxOpts: null, // options for AJAX requests
+ denyTab: true, // set to true to stop Opera from tabbing away
+ askEra: false, // prompt the user for the era in yDiv?
+ cloak: null, // cloak div
+ conv: null, // AnyTime.Converter
+ bMinW: 0, // min width of body div
+ bMinH: 0, // min height of body div
+ dMinW: 0, // min width of date div
+ dMinH: 0, // min height of date div
+ div: null, // picker div
+ dB: null, // body div
+ dD: null, // date div
+ dY: null, // years div
+ dMo: null, // months div
+ dDoM: null, // date-of-month table
+ hDoM: null, // date-of-month heading
+ hMo: null, // month heading
+ hTitle: null, // title heading
+ hY: null, // year heading
+ dT: null, // time div
+ dH: null, // hours div
+ dM: null, // minutes div
+ dS: null, // seconds div
+ dO: null, // offset (time zone) div
+ earliest: null, // earliest selectable date/time
+ fBtn: null, // button with current focus
+ fDOW: 0, // index to use as first day-of-week
+ hBlur: null, // input handler
+ hClick: null, // input handler
+ hFocus: null, // input handler
+ hKeydown: null, // input handler
+ hKeypress: null, // input handler
+ id: null, // picker ID
+ inp: null, // input text field
+ latest: null, // latest selectable date/time
+ lastAjax: null, // last value submitted using AJAX
+ lostFocus: false, // when focus is lost, must redraw
+ lX: 'X', // label for dismiss button
+ lY: 'Year', // label for year
+ lO: 'Time Zone', // label for UTC offset (time zone)
+ oBody: null, // UTC offset selector popup
+ oConv: null, // AnyTime.Converter for offset display
+ oCur: null, // current-UTC-offset button
+ oDiv: null, // UTC offset selector popup
+ oLab: null, // UTC offset label
+ oListMinW: 0, // min width of offset list element
+ oMinW: 0, // min width of UTC offset element
+ oSel: null, // select (plus/minus) UTC-offset button
+ offMin: Number.MIN_VALUE, // current UTC offset in minutes
+ offSI: -1, // current UTC label sub-index (if any)
+ offStr: "", // current UTC offset (time zone) string
+ pop: true, // picker is a popup?
+ time: null, // current date/time
+ tMinW: 0, // min width of time div
+ tMinH: 0, // min height of time div
+ url: null, // URL to submit value using AJAX
+ wMinW: 0, // min width of picker
+ wMinH: 0, // min height of picker
+ yAhead: null, // years-ahead button
+ y0XXX: null, // millenium-digit-zero button (for focus)
+ yCur: null, // current-year button
+ yDiv: null, // year selector popup
+ yLab: null, // year label
+ yNext: null, // next-year button
+ yPast: null, // years-past button
+ yPrior: null, // prior-year button
- //---------------------------------------------------------------------
- // .initialize() initializes the picker instance.
- //---------------------------------------------------------------------
+ //---------------------------------------------------------------------
+ // .initialize() initializes the picker instance.
+ //---------------------------------------------------------------------
- initialize: function( id )
- {
- _this = this;
+ initialize: function( id )
+ {
+ _this = this;
this.id = 'AnyTime--'+id.replace(/[^-_.A-Za-z0-9]/g,'--AnyTime--');
- options = jQuery.extend(true,{},options||{});
- options.utcParseOffsetCapture = true;
- this.conv = new AnyTime.Converter(options);
+ options = jQuery.extend(true,{},options||{});
+ options.utcParseOffsetCapture = true;
+ this.conv = new AnyTime.Converter(options);
- if ( options.placement )
- {
- if ( options.placement == 'inline' )
- this.pop = false;
- else if ( options.placement != 'popup' )
- throw 'unknown placement: ' + options.placement;
- }
+ if ( options.placement )
+ {
+ if ( options.placement == 'inline' )
+ this.pop = false;
+ else if ( options.placement != 'popup' )
+ throw 'unknown placement: ' + options.placement;
+ }
- if ( options.ajaxOptions )
- {
- this.ajaxOpts = jQuery.extend( {}, options.ajaxOptions );
- if ( ! this.ajaxOpts.success )
- this.ajaxOpts.success = function(data,status) { _this.inp.val(data); };
- }
-
- if ( options.earliest )
- {
- if ( typeof options.earliest.getTime == 'function' )
- this.earliest = options.earliest.getTime();
- else
- this.earliest = this.conv.parse( options.earliest.toString() );
- }
+ if ( options.ajaxOptions )
+ {
+ this.ajaxOpts = jQuery.extend( {}, options.ajaxOptions );
+ if ( ! this.ajaxOpts.success )
+ this.ajaxOpts.success = function(data,status) { _this.inp.val(data); };
+ }
+
+ if ( options.earliest )
+ {
+ if ( typeof options.earliest.getTime == 'function' )
+ this.earliest = options.earliest.getTime();
+ else
+ this.earliest = this.conv.parse( options.earliest.toString() );
+ }
- if ( options.firstDOW )
- {
- if ( ( options.firstDOW < 0 ) || ( options.firstDOW > 6 ) )
- throw new Exception('illegal firstDOW: ' + options.firstDOW);
- this.fDOW = options.firstDOW;
- }
+ if ( options.firstDOW )
+ {
+ if ( ( options.firstDOW < 0 ) || ( options.firstDOW > 6 ) )
+ throw new Exception('illegal firstDOW: ' + options.firstDOW);
+ this.fDOW = options.firstDOW;
+ }
- if ( options.latest )
- {
- if ( typeof options.latest.getTime == 'function' )
- this.latest = options.latest.getTime();
- else
- this.latest = this.conv.parse( options.latest.toString() );
- }
+ if ( options.latest )
+ {
+ if ( typeof options.latest.getTime == 'function' )
+ this.latest = options.latest.getTime();
+ else
+ this.latest = this.conv.parse( options.latest.toString() );
+ }
- this.lX = options.labelDismiss || 'X';
- this.lY = options.labelYear || 'Year';
- this.lO = options.labelTimeZone || 'Time Zone';
+ this.lX = options.labelDismiss || 'X';
+ this.lY = options.labelYear || 'Year';
+ this.lO = options.labelTimeZone || 'Time Zone';
- // Infer what we can about what to display from the format.
+ // Infer what we can about what to display from the format.
- var i;
- var t;
- var lab;
- var shownFields = 0;
- var format = this.conv.fmt;
+ var i;
+ var t;
+ var lab;
+ var shownFields = 0;
+ var format = this.conv.fmt;
- if ( typeof options.askEra != 'undefined' )
- this.askEra = options.askEra;
- else
- this.askEra = (format.indexOf('%B')>=0) || (format.indexOf('%C')>=0) || (format.indexOf('%E')>=0);
- var askYear = (format.indexOf('%Y')>=0) || (format.indexOf('%y')>=0) || (format.indexOf('%Z')>=0) || (format.indexOf('%z')>=0);
- var askMonth = (format.indexOf('%b')>=0) || (format.indexOf('%c')>=0) || (format.indexOf('%M')>=0) || (format.indexOf('%m')>=0);
- var askDoM = (format.indexOf('%D')>=0) || (format.indexOf('%d')>=0) || (format.indexOf('%e')>=0);
- var askDate = askYear || askMonth || askDoM;
- this.twelveHr = (format.indexOf('%h')>=0) || (format.indexOf('%I')>=0) || (format.indexOf('%l')>=0) || (format.indexOf('%r')>=0);
- var askHour = this.twelveHr || (format.indexOf('%H')>=0) || (format.indexOf('%k')>=0) || (format.indexOf('%T')>=0);
- var askMinute = (format.indexOf('%i')>=0) || (format.indexOf('%r')>=0) || (format.indexOf('%T')>=0);
- var askSec = ( (format.indexOf('%r')>=0) || (format.indexOf('%S')>=0) || (format.indexOf('%s')>=0) || (format.indexOf('%T')>=0) );
- if ( askSec && ( typeof options.askSecond != 'undefined' ) )
- askSec = options.askSecond;
- var askOff = ( (format.indexOf('%#')>=0) || (format.indexOf('%+')>=0) || (format.indexOf('%-')>=0) || (format.indexOf('%:')>=0) || (format.indexOf('%;')>=0) || (format.indexOf('%<')>=0) || (format.indexOf('%>')>=0) || (format.indexOf('%@')>=0) );
- var askTime = askHour || askMinute || askSec || askOff;
+ if ( typeof options.askEra != 'undefined' )
+ this.askEra = options.askEra;
+ else
+ this.askEra = (format.indexOf('%B')>=0) || (format.indexOf('%C')>=0) || (format.indexOf('%E')>=0);
+ var askYear = (format.indexOf('%Y')>=0) || (format.indexOf('%y')>=0) || (format.indexOf('%Z')>=0) || (format.indexOf('%z')>=0);
+ var askMonth = (format.indexOf('%b')>=0) || (format.indexOf('%c')>=0) || (format.indexOf('%M')>=0) || (format.indexOf('%m')>=0);
+ var askDoM = (format.indexOf('%D')>=0) || (format.indexOf('%d')>=0) || (format.indexOf('%e')>=0);
+ var askDate = askYear || askMonth || askDoM;
+ this.twelveHr = (format.indexOf('%h')>=0) || (format.indexOf('%I')>=0) || (format.indexOf('%l')>=0) || (format.indexOf('%r')>=0);
+ var askHour = this.twelveHr || (format.indexOf('%H')>=0) || (format.indexOf('%k')>=0) || (format.indexOf('%T')>=0);
+ var askMinute = (format.indexOf('%i')>=0) || (format.indexOf('%r')>=0) || (format.indexOf('%T')>=0);
+ var askSec = ( (format.indexOf('%r')>=0) || (format.indexOf('%S')>=0) || (format.indexOf('%s')>=0) || (format.indexOf('%T')>=0) );
+ if ( askSec && ( typeof options.askSecond != 'undefined' ) )
+ askSec = options.askSecond;
+ var askOff = ( (format.indexOf('%#')>=0) || (format.indexOf('%+')>=0) || (format.indexOf('%-')>=0) || (format.indexOf('%:')>=0) || (format.indexOf('%;')>=0) || (format.indexOf('%<')>=0) || (format.indexOf('%>')>=0) || (format.indexOf('%@')>=0) );
+ var askTime = askHour || askMinute || askSec || askOff;
- if ( askOff )
- this.oConv = new AnyTime.Converter( { format: options.formatUtcOffset ||
- format.match(/\S*%[-+:;<>#@]\S*/g).join(' ') } );
+ if ( askOff )
+ this.oConv = new AnyTime.Converter( { format: options.formatUtcOffset ||
+ format.match(/\S*%[-+:;<>#@]\S*/g).join(' ') } );
- // Create the picker HTML and add it to the page.
- // Popup pickers will be moved to the end of the body
- // once the entire page has loaded.
+ // Create the picker HTML and add it to the page.
+ // Popup pickers will be moved to the end of the body
+ // once the entire page has loaded.
this.inp = $(document.getElementById(id)); // avoids ID-vs-pseudo-selector probs like id="foo:bar"
- this.div = $( '<div class="AnyTime-win AnyTime-pkr ui-widget ui-widget-content ui-corner-all" style="width:0;height:0" id="' + this.id + '" aria-live="off"/>' );
- this.inp.after(this.div);
- this.wMinW = this.div.outerWidth(!$.browser.safari);
- this.wMinH = this.div.AnyTime_height(true);
- this.hTitle = $( '<h5 class="AnyTime-hdr ui-widget-header ui-corner-top"/>' );
- this.div.append( this.hTitle );
- this.dB = $( '<div class="AnyTime-body" style="width:0;height:0"/>' );
- this.div.append( this.dB );
- this.bMinW = this.dB.outerWidth(true);
- this.bMinH = this.dB.AnyTime_height(true);
+ this.div = $( '<div class="AnyTime-win AnyTime-pkr ui-widget ui-widget-content ui-corner-all" style="width:0;height:0" id="' + this.id + '" aria-live="off"/>' );
+ this.inp.after(this.div);
+ this.wMinW = this.div.outerWidth(!$.browser.safari);
+ this.wMinH = this.div.AnyTime_height(true);
+ this.hTitle = $( '<h5 class="AnyTime-hdr ui-widget-header ui-corner-top"/>' );
+ this.div.append( this.hTitle );
+ this.dB = $( '<div class="AnyTime-body" style="width:0;height:0"/>' );
+ this.div.append( this.dB );
+ this.bMinW = this.dB.outerWidth(true);
+ this.bMinH = this.dB.AnyTime_height(true);
- if ( options.hideInput )
- this.inp.css({border:0,height:'1px',margin:0,padding:0,width:'1px'});
-
- // Add dismiss box to title (if popup)
+ if ( options.hideInput )
+ this.inp.css({border:0,height:'1px',margin:0,padding:0,width:'1px'});
+
+ // Add dismiss box to title (if popup)
- var t = null;
- var xDiv = null;
- if ( this.pop )
- {
- xDiv = $( '<div class="AnyTime-x-btn ui-state-default">'+this.lX+'</div>' );
- this.hTitle.append( xDiv );
- xDiv.click(function(e){_this.dismiss(e);});
- }
+ t = null;
+ var xDiv = null;
+ if ( this.pop )
+ {
+ xDiv = $( '<div class="AnyTime-x-btn ui-state-default">'+this.lX+'</div>' );
+ this.hTitle.append( xDiv );
+ xDiv.click(function(e){_this.dismiss(e);});
+ }
- // date (calendar) portion
+ // date (calendar) portion
- var lab = '';
-
- if ( askDate )
- {
- this.dD = $( '<div class="AnyTime-date" style="width:0;height:0"/>' );
- this.dB.append( this.dD );
- this.dMinW = this.dD.outerWidth(true);
- this.dMinH = this.dD.AnyTime_height(true);
+ lab = '';
+ if ( askDate )
+ {
+ this.dD = $( '<div class="AnyTime-date" style="width:0;height:0"/>' );
+ this.dB.append( this.dD );
+ this.dMinW = this.dD.outerWidth(true);
+ this.dMinH = this.dD.AnyTime_height(true);
- if ( askYear )
- {
- this.yLab = $('<h6 class="AnyTime-lbl AnyTime-lbl-yr">' + this.lY + '</h6>');
- this.dD.append( this.yLab );
+ if ( askYear )
+ {
+ this.yLab = $('<h6 class="AnyTime-lbl AnyTime-lbl-yr">' + this.lY + '</h6>');
+ this.dD.append( this.yLab );
- this.dY = $( '<ul class="AnyTime-yrs ui-helper-reset" />' );
- this.dD.append( this.dY );
+ this.dY = $( '<ul class="AnyTime-yrs ui-helper-reset" />' );
+ this.dD.append( this.dY );
- this.yPast = this.btn(this.dY,'<',this.newYear,['yrs-past'],'- '+this.lY);
- this.yPrior = this.btn(this.dY,'1',this.newYear,['yr-prior'],'-1 '+this.lY);
- this.yCur = this.btn(this.dY,'2',this.newYear,['yr-cur'],this.lY);
- this.yCur.removeClass('ui-state-default');
- this.yCur.addClass('AnyTime-cur-btn ui-state-default ui-state-highlight');
+ this.yPast = this.btn(this.dY,'<',this.newYear,['yrs-past'],'- '+this.lY);
+ this.yPrior = this.btn(this.dY,'1',this.newYear,['yr-prior'],'-1 '+this.lY);
+ this.yCur = this.btn(this.dY,'2',this.newYear,['yr-cur'],this.lY);
+ this.yCur.removeClass('ui-state-default');
+ this.yCur.addClass('AnyTime-cur-btn ui-state-default ui-state-highlight');
- this.yNext = this.btn(this.dY,'3',this.newYear,['yr-next'],'+1 '+this.lY);
- this.yAhead = this.btn(this.dY,'>',this.newYear,['yrs-ahead'],'+ '+this.lY);
-
- shownFields++;
+ this.yNext = this.btn(this.dY,'3',this.newYear,['yr-next'],'+1 '+this.lY);
+ this.yAhead = this.btn(this.dY,'>',this.newYear,['yrs-ahead'],'+ '+this.lY);
+
+ shownFields++;
- } // if ( askYear )
+ } // if ( askYear )
- if ( askMonth )
- {
- lab = options.labelMonth || 'Month';
- this.hMo = $( '<h6 class="AnyTime-lbl AnyTime-lbl-month">' + lab + '</h6>' );
- this.dD.append( this.hMo );
- this.dMo = $('<ul class="AnyTime-mons" />');
- this.dD.append(this.dMo);
- for ( i = 0 ; i < 12 ; i++ )
- {
- var mBtn = this.btn( this.dMo, this.conv.mAbbr[i],
- function( event )
- {
- var elem = $(event.target);
- if ( elem.hasClass("AnyTime-out-btn") )
- return;
- var mo = event.target.AnyTime_month;
- var t = new Date(this.time.getTime());
- if ( t.getDate() > __daysIn[mo] )
- t.setDate(__daysIn[mo])
- t.setMonth(mo);
- this.set(t);
- this.upd(elem);
- },
- ['mon','mon'+String(i+1)], lab+' '+this.conv.mNames[i] );
- mBtn[0].AnyTime_month = i;
- }
- shownFields++;
- }
+ if ( askMonth )
+ {
+ lab = options.labelMonth || 'Month';
+ this.hMo = $( '<h6 class="AnyTime-lbl AnyTime-lbl-month">' + lab + '</h6>' );
+ this.dD.append( this.hMo );
+ this.dMo = $('<ul class="AnyTime-mons" />');
+ this.dD.append(this.dMo);
+ for ( i = 0 ; i < 12 ; i++ )
+ {
+ var mBtn = this.btn( this.dMo, this.conv.mAbbr[i],
+ function( event )
+ {
+ var elem = $(event.target);
+ if ( elem.hasClass("AnyTime-out-btn") )
+ return;
+ var mo = event.target.AnyTime_month;
+ var t = new Date(this.time.getTime());
+ if ( t.getDate() > __daysIn[mo] )
+ t.setDate(__daysIn[mo])
+ t.setMonth(mo);
+ this.set(t);
+ this.upd(elem);
+ },
+ ['mon','mon'+String(i+1)], lab+' '+this.conv.mNames[i] );
+ mBtn[0].AnyTime_month = i;
+ }
+ shownFields++;
+ }
- if ( askDoM )
- {
- lab = options.labelDayOfMonth || 'Day of Month';
- this.hDoM = $('<h6 class="AnyTime-lbl AnyTime-lbl-dom">' + lab + '</h6>' );
- this.dD.append( this.hDoM );
- this.dDoM = $( '<table border="0" cellpadding="0" cellspacing="0" class="AnyTime-dom-table"/>' );
- this.dD.append( this.dDoM );
- t = $( '<thead class="AnyTime-dom-head"/>' );
- this.dDoM.append(t);
- var tr = $( '<tr class="AnyTime-dow"/>' );
- t.append(tr);
- for ( i = 0 ; i < 7 ; i++ )
- tr.append( '<th class="AnyTime-dow AnyTime-dow'+String(i+1)+'">'+this.conv.dAbbr[(this.fDOW+i)%7]+'</th>' );
+ if ( askDoM )
+ {
+ lab = options.labelDayOfMonth || 'Day of Month';
+ this.hDoM = $('<h6 class="AnyTime-lbl AnyTime-lbl-dom">' + lab + '</h6>' );
+ this.dD.append( this.hDoM );
+ this.dDoM = $( '<table border="0" cellpadding="0" cellspacing="0" class="AnyTime-dom-table"/>' );
+ this.dD.append( this.dDoM );
+ t = $( '<thead class="AnyTime-dom-head"/>' );
+ this.dDoM.append(t);
+ var tr = $( '<tr class="AnyTime-dow"/>' );
+ t.append(tr);
+ for ( i = 0 ; i < 7 ; i++ )
+ tr.append( '<th class="AnyTime-dow AnyTime-dow'+String(i+1)+'">'+this.conv.dAbbr[(this.fDOW+i)%7]+'</th>' );
- var tbody = $( '<tbody class="AnyTime-dom-body" />' );
- this.dDoM.append(tbody);
- for ( var r = 0 ; r < 6 ; r++ )
- {
- tr = $( '<tr class="AnyTime-wk AnyTime-wk'+String(r+1)+'"/>' );
- tbody.append(tr);
- for ( i = 0 ; i < 7 ; i++ )
- this.btn( tr, 'x',
- function( event )
- {
- var elem = $(event.target);
- if ( elem.hasClass("AnyTime-out-btn") )
- return;
- var dom = Number(elem.html());
- if ( dom )
- {
- var t = new Date(this.time.getTime());
- t.setDate(dom);
- this.set(t);
- this.upd(elem);
- }
- },
- ['dom'], lab );
- }
- shownFields++;
+ var tbody = $( '<tbody class="AnyTime-dom-body" />' );
+ this.dDoM.append(tbody);
+ for ( var r = 0 ; r < 6 ; r++ )
+ {
+ tr = $( '<tr class="AnyTime-wk AnyTime-wk'+String(r+1)+'"/>' );
+ tbody.append(tr);
+ for ( i = 0 ; i < 7 ; i++ )
+ this.btn( tr, 'x',
+ function( event )
+ {
+ var elem = $(event.target);
+ if ( elem.hasClass("AnyTime-out-btn") )
+ return;
+ var dom = Number(elem.html());
+ if ( dom )
+ {
+ var t = new Date(this.time.getTime());
+ t.setDate(dom);
+ this.set(t);
+ this.upd(elem);
+ }
+ },
+ ['dom'], lab );
+ }
+ shownFields++;
- } // if ( askDoM )
+ } // if ( askDoM )
- } // if ( askDate )
+ } // if ( askDate )
- // time portion
+ // time portion
- if ( askTime )
- {
+ if ( askTime )
+ {
var tensDiv, onesDiv;
- this.dT = $('<div class="AnyTime-time" style="width:0;height:0" />');
- this.dB.append(this.dT);
- this.tMinW = this.dT.outerWidth(true);
- this.tMinH = this.dT.AnyTime_height(true);
+ this.dT = $('<div class="AnyTime-time" style="width:0;height:0" />');
+ this.dB.append(this.dT);
+ this.tMinW = this.dT.outerWidth(true);
+ this.tMinH = this.dT.AnyTime_height(true);
- if ( askHour )
- {
- this.dH = $('<div class="AnyTime-hrs"/>');
- this.dT.append(this.dH);
+ if ( askHour )
+ {
+ this.dH = $('<div class="AnyTime-hrs"/>');
+ this.dT.append(this.dH);
- lab = options.labelHour || 'Hour';
- this.dH.append( $('<h6 class="AnyTime-lbl AnyTime-lbl-hr">'+lab+'</h6>') );
- var amDiv = $('<ul class="AnyTime-hrs-am"/>');
- this.dH.append( amDiv );
- var pmDiv = $('<ul class="AnyTime-hrs-pm"/>');
- this.dH.append( pmDiv );
+ lab = options.labelHour || 'Hour';
+ this.dH.append( $('<h6 class="AnyTime-lbl AnyTime-lbl-hr">'+lab+'</h6>') );
+ var amDiv = $('<ul class="AnyTime-hrs-am"/>');
+ this.dH.append( amDiv );
+ var pmDiv = $('<ul class="AnyTime-hrs-pm"/>');
+ this.dH.append( pmDiv );
- for ( i = 0 ; i < 12 ; i++ )
- {
- if ( this.twelveHr )
- {
- if ( i == 0 )
- t = '12am';
- else
- t = String(i)+'am';
- }
- else
- t = AnyTime.pad(i,2);
+ for ( i = 0 ; i < 12 ; i++ )
+ {
+ if ( this.twelveHr )
+ {
+ if ( i == 0 )
+ t = '12am';
+ else
+ t = String(i)+'am';
+ }
+ else
+ t = AnyTime.pad(i,2);
- this.btn( amDiv, t, this.newHour,['hr','hr'+String(i)],lab+' '+t);
+ this.btn( amDiv, t, this.newHour,['hr','hr'+String(i)],lab+' '+t);
- if ( this.twelveHr )
- {
- if ( i == 0 )
- t = '12pm';
- else
- t = String(i)+'pm';
- }
- else
- t = i+12;
+ if ( this.twelveHr )
+ {
+ if ( i == 0 )
+ t = '12pm';
+ else
+ t = String(i)+'pm';
+ }
+ else
+ t = i+12;
- this.btn( pmDiv, t, this.newHour,['hr','hr'+String(i+12)],lab+' '+t);
- }
+ this.btn( pmDiv, t, this.newHour,['hr','hr'+String(i+12)],lab+' '+t);
+ }
- shownFields++;
-
- } // if ( askHour )
+ shownFields++;
+
+ } // if ( askHour )
- if ( askMinute )
- {
- this.dM = $('<div class="AnyTime-mins"/>');
- this.dT.append(this.dM);
+ if ( askMinute )
+ {
+ this.dM = $('<div class="AnyTime-mins"/>');
+ this.dT.append(this.dM);
- lab = options.labelMinute || 'Minute';
- this.dM.append( $('<h6 class="AnyTime-lbl AnyTime-lbl-min">'+lab+'</h6>') );
+ lab = options.labelMinute || 'Minute';
+ this.dM.append( $('<h6 class="AnyTime-lbl AnyTime-lbl-min">'+lab+'</h6>') );
tensDiv = $('<ul class="AnyTime-mins-tens"/>');
- this.dM.append(tensDiv);
+ this.dM.append(tensDiv);
- for ( i = 0 ; i < 6 ; i++ )
- this.btn( tensDiv, i,
- function( event )
- {
- var elem = $(event.target);
- if ( elem.hasClass("AnyTime-out-btn") )
- return;
- var t = new Date(this.time.getTime());
- t.setMinutes( (Number(elem.text())*10) + (this.time.getMinutes()%10) );
- this.set(t);
- this.upd(elem);
- },
- ['min-ten','min'+i+'0'], lab+' '+i+'0' );
- for ( ; i < 12 ; i++ )
- this.btn( tensDiv, ' ', $.noop, ['min-ten','min'+i+'0'], lab+' '+i+'0' ).addClass('AnyTime-min-ten-btn-empty ui-state-default ui-state-disabled');
+ for ( i = 0 ; i < 6 ; i++ )
+ this.btn( tensDiv, i,
+ function( event )
+ {
+ var elem = $(event.target);
+ if ( elem.hasClass("AnyTime-out-btn") )
+ return;
+ var t = new Date(this.time.getTime());
+ t.setMinutes( (Number(elem.text())*10) + (this.time.getMinutes()%10) );
+ this.set(t);
+ this.upd(elem);
+ },
+ ['min-ten','min'+i+'0'], lab+' '+i+'0' );
+ for ( ; i < 12 ; i++ )
+ this.btn( tensDiv, ' ', $.noop, ['min-ten','min'+i+'0'], lab+' '+i+'0' ).addClass('AnyTime-min-ten-btn-empty ui-state-default ui-state-disabled');
onesDiv = $('<ul class="AnyTime-mins-ones"/>');
- this.dM.append(onesDiv);
- for ( i = 0 ; i < 10 ; i++ )
- this.btn( onesDiv, i,
- function( event )
- {
- var elem = $(event.target);
- if ( elem.hasClass("AnyTime-out-btn") )
- return;
- var t = new Date(this.time.getTime());
- t.setMinutes( (Math.floor(this.time.getMinutes()/10)*10)+Number(elem.text()) );
- this.set(t);
- this.upd(elem);
- },
- ['min-one','min'+i], lab+' '+i );
- for ( ; i < 12 ; i++ )
- this.btn( onesDiv, ' ', $.noop, ['min-one','min'+i+'0'], lab+' '+i ).addClass('AnyTime-min-one-btn-empty ui-state-default ui-state-disabled');
+ this.dM.append(onesDiv);
+ for ( i = 0 ; i < 10 ; i++ )
+ this.btn( onesDiv, i,
+ function( event )
+ {
+ var elem = $(event.target);
+ if ( elem.hasClass("AnyTime-out-btn") )
+ return;
+ var t = new Date(this.time.getTime());
+ t.setMinutes( (Math.floor(this.time.getMinutes()/10)*10)+Number(elem.text()) );
+ this.set(t);
+ this.upd(elem);
+ },
+ ['min-one','min'+i], lab+' '+i );
+ for ( ; i < 12 ; i++ )
+ this.btn( onesDiv, ' ', $.noop, ['min-one','min'+i+'0'], lab+' '+i ).addClass('AnyTime-min-one-btn-empty ui-state-default ui-state-disabled');
- shownFields++;
+ shownFields++;
- } // if ( askMinute )
+ } // if ( askMinute )
- if ( askSec )
- {
- this.dS = $('<div class="AnyTime-secs"/>');
- this.dT.append(this.dS);
- lab = options.labelSecond || 'Second';
- this.dS.append( $('<h6 class="AnyTime-lbl AnyTime-lbl-sec">'+lab+'</h6>') );
+ if ( askSec )
+ {
+ this.dS = $('<div class="AnyTime-secs"/>');
+ this.dT.append(this.dS);
+ lab = options.labelSecond || 'Second';
+ this.dS.append( $('<h6 class="AnyTime-lbl AnyTime-lbl-sec">'+lab+'</h6>') );
tensDiv = $('<ul class="AnyTime-secs-tens"/>');
- this.dS.append(tensDiv);
+ this.dS.append(tensDiv);
- for ( i = 0 ; i < 6 ; i++ )
- this.btn( tensDiv, i,
- function( event )
- {
- var elem = $(event.target);
- if ( elem.hasClass("AnyTime-out-btn") )
- return;
- var t = new Date(this.time.getTime());
- t.setSeconds( (Number(elem.text())*10) + (this.time.getSeconds()%10) );
- this.set(t);
- this.upd(elem);
- },
- ['sec-ten','sec'+i+'0'], lab+' '+i+'0' );
- for ( ; i < 12 ; i++ )
- this.btn( tensDiv, ' ', $.noop, ['sec-ten','sec'+i+'0'], lab+' '+i+'0' ).addClass('AnyTime-sec-ten-btn-empty ui-state-default ui-state-disabled');
+ for ( i = 0 ; i < 6 ; i++ )
+ this.btn( tensDiv, i,
+ function( event )
+ {
+ var elem = $(event.target);
+ if ( elem.hasClass("AnyTime-out-btn") )
+ return;
+ var t = new Date(this.time.getTime());
+ t.setSeconds( (Number(elem.text())*10) + (this.time.getSeconds()%10) );
+ this.set(t);
+ this.upd(elem);
+ },
+ ['sec-ten','sec'+i+'0'], lab+' '+i+'0' );
+ for ( ; i < 12 ; i++ )
+ this.btn( tensDiv, ' ', $.noop, ['sec-ten','sec'+i+'0'], lab+' '+i+'0' ).addClass('AnyTime-sec-ten-btn-empty ui-state-default ui-state-disabled');
onesDiv = $('<ul class="AnyTime-secs-ones"/>');
- this.dS.append(onesDiv);
- for ( i = 0 ; i < 10 ; i++ )
- this.btn( onesDiv, i,
- function( event )
- {
- var elem = $(event.target);
- if ( elem.hasClass("AnyTime-out-btn") )
- return;
- var t = new Date(this.time.getTime());
- t.setSeconds( (Math.floor(this.time.getSeconds()/10)*10) + Number(elem.text()) );
- this.set(t);
- this.upd(elem);
- },
- ['sec-one','sec'+i], lab+' '+i );
- for ( ; i < 12 ; i++ )
- this.btn( onesDiv, ' ', $.noop, ['sec-one','sec'+i+'0'], lab+' '+i ).addClass('AnyTime-sec-one-btn-empty ui-state-default ui-state-disabled');
+ this.dS.append(onesDiv);
+ for ( i = 0 ; i < 10 ; i++ )
+ this.btn( onesDiv, i,
+ function( event )
+ {
+ var elem = $(event.target);
+ if ( elem.hasClass("AnyTime-out-btn") )
+ return;
+ var t = new Date(this.time.getTime());
+ t.setSeconds( (Math.floor(this.time.getSeconds()/10)*10) + Number(elem.text()) );
+ this.set(t);
+ this.upd(elem);
+ },
+ ['sec-one','sec'+i], lab+' '+i );
+ for ( ; i < 12 ; i++ )
+ this.btn( onesDiv, ' ', $.noop, ['sec-one','sec'+i+'0'], lab+' '+i ).addClass('AnyTime-sec-one-btn-empty ui-state-default ui-state-disabled');
- shownFields++;
+ shownFields++;
- } // if ( askSec )
+ } // if ( askSec )
- if ( askOff )
- {
- this.dO = $('<div class="AnyTime-offs" />');
- this.dT.append(this.dO);
- this.oMinW = this.dO.outerWidth(true);
-
- this.oLab = $('<h6 class="AnyTime-lbl AnyTime-lbl-off">' + this.lO + '</h6>');
- this.dO.append( this.oLab );
-
- var offDiv = $('<ul class="AnyTime-off-list ui-helper-reset" />');
- this.dO.append(offDiv);
-
- this.oCur = this.btn(offDiv,'',this.newOffset,['off','off-cur'],lab);
- this.oCur.removeClass('ui-state-default');
- this.oCur.addClass('AnyTime-cur-btn ui-state-default ui-state-highlight');
- this.oCur.css({overflow:"hidden"});
+ if ( askOff )
+ {
+ this.dO = $('<div class="AnyTime-offs" />');
+ this.dT.append(this.dO);
+ this.oMinW = this.dO.outerWidth(true);
+
+ this.oLab = $('<h6 class="AnyTime-lbl AnyTime-lbl-off">' + this.lO + '</h6>');
+ this.dO.append( this.oLab );
+
+ var offDiv = $('<ul class="AnyTime-off-list ui-helper-reset" />');
+ this.dO.append(offDiv);
+
+ this.oCur = this.btn(offDiv,'',this.newOffset,['off','off-cur'],lab);
+ this.oCur.removeClass('ui-state-default');
+ this.oCur.addClass('AnyTime-cur-btn ui-state-default ui-state-highlight');
+ this.oCur.css({overflow:"hidden"});
- this.oSel = this.btn(offDiv,'±',this.newOffset,['off','off-select'],'+/- '+this.lO);
- this.oListMinW = this.oCur.outerWidth(true)+this.oSel.outerWidth(true);
+ this.oSel = this.btn(offDiv,'±',this.newOffset,['off','off-select'],'+/- '+this.lO);
+ this.oListMinW = this.oCur.outerWidth(true)+this.oSel.outerWidth(true);
- shownFields++;
- }
-
- } // if ( askTime )
+ shownFields++;
+ }
+
+ } // if ( askTime )
- // Set the title. If a title option has been specified, use it.
- // Otherwise, determine a worthy title based on which (and how many)
- // format fields have been specified.
+ // Set the title. If a title option has been specified, use it.
+ // Otherwise, determine a worthy title based on which (and how many)
+ // format fields have been specified.
- if ( options.labelTitle )
- this.hTitle.append( options.labelTitle );
- else if ( shownFields > 1 )
- this.hTitle.append( 'Select a '+(askDate?(askTime?'Date and Time':'Date'):'Time') );
- else
- this.hTitle.append( 'Select' );
+ if ( options.labelTitle )
+ this.hTitle.append( options.labelTitle );
+ else if ( shownFields > 1 )
+ this.hTitle.append( 'Select a '+(askDate?(askTime?'Date and Time':'Date'):'Time') );
+ else
+ this.hTitle.append( 'Select' );
- // Initialize the picker's date/time value.
+ // Initialize the picker's date/time value.
- try
- {
- this.time = this.conv.parse(this.inp.val());
- this.offMin = this.conv.getUtcParseOffsetCaptured();
- this.offSI = this.conv.getUtcParseOffsetSubIndex();
- }
- catch ( e )
- {
- this.time = new Date();
- }
- this.lastAjax = this.time;
+ try
+ {
+ this.time = this.conv.parse(this.inp.val());
+ this.offMin = this.conv.getUtcParseOffsetCaptured();
+ this.offSI = this.conv.getUtcParseOffsetSubIndex();
+ }
+ catch ( e )
+ {
+ this.time = new Date();
+ }
+ this.lastAjax = this.time;
- // If this is a popup picker, hide it until needed.
+ // If this is a popup picker, hide it until needed.
- if ( this.pop )
- {
- this.div.hide();
- if ( __iframe )
- __iframe.hide();
- this.div.css('position','absolute');
- }
-
- // Setup event listeners for the input and resize listeners for
- // the picker. Add the picker to the instances list (which is used
- // to hide pickers if the user clicks off of them).
+ if ( this.pop )
+ {
+ this.div.hide();
+ if ( __iframe )
+ __iframe.hide();
+ this.div.css('position','absolute');
+ }
+
+ // Setup event listeners for the input and resize listeners for
+ // the picker. Add the picker to the instances list (which is used
+ // to hide pickers if the user clicks off of them).
- this.inp.blur( this.hBlur =
- function(e)
- {
- _this.inpBlur(e);
- } );
-
- this.inp.click( this.hClick =
- function(e)
- {
- _this.showPkr(e);
- } );
-
- this.inp.focus( this.hFocus =
- function(e)
- {
- if ( _this.lostFocus )
- _this.showPkr(e);
- _this.lostFocus = false;
- } );
-
- this.inp.keydown( this.hKeydown =
- function(e)
- {
- _this.key(e);
- } );
-
- this.inp.keypress( this.hKeypress =
- function(e)
- {
- if ( $.browser.opera && _this.denyTab )
- e.preventDefault();
- } );
-
- this.div.click(
- function(e)
- {
- _this.lostFocus = false;
- _this.inp.focus();
- } );
-
- $(window).resize(
- function(e)
- {
- _this.pos(e);
- } );
-
- if ( __initialized )
- this.onReady();
+ this.inp.blur( this.hBlur =
+ function(e)
+ {
+ _this.inpBlur(e);
+ } );
+
+ this.inp.click( this.hClick =
+ function(e)
+ {
+ _this.showPkr(e);
+ } );
+
+ this.inp.focus( this.hFocus =
+ function(e)
+ {
+ if ( _this.lostFocus )
+ _this.showPkr(e);
+ _this.lostFocus = false;
+ } );
+
+ this.inp.keydown( this.hKeydown =
+ function(e)
+ {
+ _this.key(e);
+ } );
+
+ this.inp.keypress( this.hKeypress =
+ function(e)
+ {
+ if ( $.browser.opera && _this.denyTab )
+ e.preventDefault();
+ } );
+
+ this.div.click(
+ function(e)
+ {
+ _this.lostFocus = false;
+ _this.inp.focus();
+ } );
+
+ $(window).resize(
+ function(e)
+ {
+ _this.pos(e);
+ } );
+
+ if ( __initialized )
+ this.onReady();
- }, // initialize()
+ }, // initialize()
- //---------------------------------------------------------------------
- // .ajax() notifies the server of a value change using Ajax.
- //---------------------------------------------------------------------
+ //---------------------------------------------------------------------
+ // .ajax() notifies the server of a value change using Ajax.
+ //---------------------------------------------------------------------
- ajax: function()
- {
- if ( this.ajaxOpts && ( this.time.getTime() != this.lastAjax.getTime() ) )
- {
- try
- {
- var opts = jQuery.extend( {}, this.ajaxOpts );
- if ( typeof opts.data == 'object' )
- opts.data[this.inp[0].name||this.inp[0].id] = this.inp.val();
- else
- {
- var opt = (this.inp[0].name||this.inp[0].id) + '=' + encodeURI(this.inp.val());
- if ( opts.data )
- opts.data += '&' + opt;
- else
- opts.data = opt;
- }
- $.ajax( opts );
- this.lastAjax = this.time;
- }
- catch( e )
- {
- }
- }
- return;
-
- }, // .ajax()
+ ajax: function()
+ {
+ if ( this.ajaxOpts && ( this.time.getTime() != this.lastAjax.getTime() ) )
+ {
+ try
+ {
+ var opts = jQuery.extend( {}, this.ajaxOpts );
+ if ( typeof opts.data == 'object' )
+ opts.data[this.inp[0].name||this.inp[0].id] = this.inp.val();
+ else
+ {
+ var opt = (this.inp[0].name||this.inp[0].id) + '=' + encodeURI(this.inp.val());
+ if ( opts.data )
+ opts.data += '&' + opt;
+ else
+ opts.data = opt;
+ }
+ $.ajax( opts );
+ this.lastAjax = this.time;
+ }
+ catch( e )
+ {
+ }
+ }
+ return;
+
+ }, // .ajax()
- //---------------------------------------------------------------------
- // .askOffset() is called by this.newOffset() when the UTC offset or
- // +- selection button is clicked.
- //---------------------------------------------------------------------
+ //---------------------------------------------------------------------
+ // .askOffset() is called by this.newOffset() when the UTC offset or
+ // +- selection button is clicked.
+ //---------------------------------------------------------------------
- askOffset: function( event )
- {
- if ( ! this.oDiv )
- {
- this.makeCloak();
-
- this.oDiv = $('<div class="AnyTime-win AnyTime-off-selector ui-widget ui-widget-content ui-corner-all" style="position:absolute" />');
- this.div.append(this.oDiv);
-
- // the order here (HDR,BODY,XDIV,TITLE) is important for width calcluation:
- var title = $('<h5 class="AnyTime-hdr AnyTime-hdr-off-selector ui-widget-header ui-corner-top" />');
- this.oDiv.append( title );
- this.oBody = $('<div class="AnyTime-body AnyTime-body-off-selector" style="overflow:auto;white-space:nowrap" />');
- this.oDiv.append( this.oBody );
- var oBHS = this.oBody.AnyTime_height(true); // body spacing
- var oBWS = this.oBody.AnyTime_width(true);
- var oTWS = title.AnyTime_width(true);
-
- var xDiv = $('<div class="AnyTime-x-btn ui-state-default">'+this.lX+'</div>');
- title.append(xDiv);
- xDiv.click(function(e){_this.dismissODiv(e);});
- title.append( this.lO );
- if ( __msie6 || __msie7 ) // IE bugs!
- title.width(String(this.lO.length*0.8)+"em");
- var oBW = title.AnyTime_width(true) - oBWS; // initial body width
-
- var cont = $('<ul class="AnyTime-off-off" />' );
- var last = null;
- this.oBody.append(cont);
- var useSubIndex = (this.oConv.fmt.indexOf('%@')>=0);
- var btnW = 0; // determine uniform button width
- if ( AnyTime.utcLabel )
- for ( var o = -720 ; o < 720 ; o++ )
- if ( AnyTime.utcLabel[o] )
- {
- this.oConv.setUtcFormatOffsetAlleged(o);
- for ( var i = 0; i < AnyTime.utcLabel[o].length; i++ )
- {
- this.oConv.setUtcFormatOffsetSubIndex(i);
- last = this.btn( cont, this.oConv.format(this.time), this.newOPos, ['off-off'], o );
- last[0].AnyTime_offMin = o;
- last[0].AnyTime_offSI = i;
- var w = last.width();
- if ( w > btnW )
- btnW = w;
- if ( ! useSubIndex )
- break; // for
- }
- }
-
- if ( last )
- last.addClass('AnyTime-off-off-last-btn');
-
- // compute optimal width
-
- this.oBody.find('.AnyTime-off-off-btn').width(btnW); // set uniform button width
- if ( last )
- {
- var lW = last.AnyTime_width(true);
- if ( lW > oBW )
- oBW = lW+1; // expand body to hold buttons
- }
- this.oBody.width(oBW);
- oBW = this.oBody.AnyTime_width(true);
- this.oDiv.width( oBW );
- if ( __msie6 || __msie7 ) // IE bugs!
- title.width( oBW - oTWS );
+ askOffset: function( event )
+ {
+ if ( ! this.oDiv )
+ {
+ this.makeCloak();
+
+ this.oDiv = $('<div class="AnyTime-win AnyTime-off-selector ui-widget ui-widget-content ui-corner-all" style="position:absolute" />');
+ this.div.append(this.oDiv);
+
+ // the order here (HDR,BODY,XDIV,TITLE) is important for width calcluation:
+ var title = $('<h5 class="AnyTime-hdr AnyTime-hdr-off-selector ui-widget-header ui-corner-top" />');
+ this.oDiv.append( title );
+ this.oBody = $('<div class="AnyTime-body AnyTime-body-off-selector" style="overflow:auto;white-space:nowrap" />');
+ this.oDiv.append( this.oBody );
+ var oBHS = this.oBody.AnyTime_height(true); // body spacing
+ var oBWS = this.oBody.AnyTime_width(true);
+ var oTWS = title.AnyTime_width(true);
+
+ var xDiv = $('<div class="AnyTime-x-btn ui-state-default">'+this.lX+'</div>');
+ title.append(xDiv);
+ xDiv.click(function(e){_this.dismissODiv(e);});
+ title.append( this.lO );
+ if ( __msie6 || __msie7 ) // IE bugs!
+ title.width(String(this.lO.length*0.8)+"em");
+ var oBW = title.AnyTime_width(true) - oBWS; // initial body width
+
+ var cont = $('<ul class="AnyTime-off-off" />' );
+ var last = null;
+ this.oBody.append(cont);
+ var useSubIndex = (this.oConv.fmt.indexOf('%@')>=0);
+ var btnW = 0; // determine uniform button width
+ if ( AnyTime.utcLabel )
+ for ( var o = -720 ; o < 720 ; o++ )
+ if ( AnyTime.utcLabel[o] )
+ {
+ this.oConv.setUtcFormatOffsetAlleged(o);
+ for ( var i = 0; i < AnyTime.utcLabel[o].length; i++ )
+ {
+ this.oConv.setUtcFormatOffsetSubIndex(i);
+ last = this.btn( cont, this.oConv.format(this.time), this.newOPos, ['off-off'], o );
+ last[0].AnyTime_offMin = o;
+ last[0].AnyTime_offSI = i;
+ var w = last.width();
+ if ( w > btnW )
+ btnW = w;
+ if ( ! useSubIndex )
+ break; // for
+ }
+ }
+
+ if ( last )
+ last.addClass('AnyTime-off-off-last-btn');
+
+ // compute optimal width
+
+ this.oBody.find('.AnyTime-off-off-btn').width(btnW); // set uniform button width
+ if ( last )
+ {
+ var lW = last.AnyTime_width(true);
+ if ( lW > oBW )
+ oBW = lW+1; // expand body to hold buttons
+ }
+ this.oBody.width(oBW);
+ oBW = this.oBody.AnyTime_width(true);
+ this.oDiv.width( oBW );
+ if ( __msie6 || __msie7 ) // IE bugs!
+ title.width( oBW - oTWS );
- // compute optimal height
-
- var oH = this.oDiv.AnyTime_height(true);
- var oHmax = this.div.height() * 0.75;
- if ( oH > oHmax )
- {
- oH = oHmax;
- this.oBody.height(oH-(title.AnyTime_height(true)+oBHS));
- this.oBody.width(this.oBody.width()+20); // add nominal px for scrollbar
- this.oDiv.width(this.oDiv.width()+20);
- if ( __msie6 || __msie7 ) // IE bugs!
- title.width( this.oBody.AnyTime_width(true) - oTWS );
- }
- if ( ! __msie7 ) // IE7 bug!
- this.oDiv.height(String(oH)+'px');
+ // compute optimal height
+
+ var oH = this.oDiv.AnyTime_height(true);
+ var oHmax = this.div.height() * 0.75;
+ if ( oH > oHmax )
+ {
+ oH = oHmax;
+ this.oBody.height(oH-(title.AnyTime_height(true)+oBHS));
+ this.oBody.width(this.oBody.width()+20); // add nominal px for scrollbar
+ this.oDiv.width(this.oDiv.width()+20);
+ if ( __msie6 || __msie7 ) // IE bugs!
+ title.width( this.oBody.AnyTime_width(true) - oTWS );
+ }
+ if ( ! __msie7 ) // IE7 bug!
+ this.oDiv.height(String(oH)+'px');
- } // if ( ! this.oDiv )
- else
- {
- this.cloak.show();
- this.oDiv.show();
- }
- this.pos(event);
- this.updODiv(null);
+ } // if ( ! this.oDiv )
+ else
+ {
+ this.cloak.show();
+ this.oDiv.show();
+ }
+ this.pos(event);
+ this.updODiv(null);
- var f = this.oDiv.find('.AnyTime-off-off-btn.AnyTime-cur-btn:first');
- if ( ! f.length )
- f = this.oDiv.find('.AnyTime-off-off-btn:first');
- this.setFocus( f );
-
- }, // .askOffset()
+ var f = this.oDiv.find('.AnyTime-off-off-btn.AnyTime-cur-btn:first');
+ if ( ! f.length )
+ f = this.oDiv.find('.AnyTime-off-off-btn:first');
+ this.setFocus( f );
+
+ }, // .askOffset()
- //---------------------------------------------------------------------
- // .askYear() is called by this.newYear() when the yPast or yAhead
- // button is clicked.
- //---------------------------------------------------------------------
+ //---------------------------------------------------------------------
+ // .askYear() is called by this.newYear() when the yPast or yAhead
+ // button is clicked.
+ //---------------------------------------------------------------------
- askYear: function( event )
- {
- if ( ! this.yDiv )
- {
- this.makeCloak();
-
- this.yDiv = $('<div class="AnyTime-win AnyTime-yr-selector ui-widget ui-widget-content ui-corner-all" style="position:absolute" />');
- this.div.append(this.yDiv);
-
- var title = $('<h5 class="AnyTime-hdr AnyTime-hdr-yr-selector ui-widget-header ui-corner-top" />');
- this.yDiv.append( title );
-
- var xDiv = $('<div class="AnyTime-x-btn ui-state-default">'+this.lX+'</div>');
- title.append(xDiv);
- xDiv.click(function(e){_this.dismissYDiv(e);});
-
- title.append( this.lY );
-
- var yBody = $('<div class="AnyTime-body AnyTime-body-yr-selector" />');
- var yW = yBody.AnyTime_width(true);
- var yH = 0;
- this.yDiv.append( yBody );
-
- cont = $('<ul class="AnyTime-yr-mil" />' );
- yBody.append(cont);
- this.y0XXX = this.btn( cont, 0, this.newYPos,['mil','mil0'],this.lY+' '+0+'000');
- for ( i = 1; i < 10 ; i++ )
- this.btn( cont, i, this.newYPos,['mil','mil'+i],this.lY+' '+i+'000');
- yW += cont.AnyTime_width(true);
- if ( yH < cont.AnyTime_height(true) )
- yH = cont.AnyTime_height(true);
-
- cont = $('<ul class="AnyTime-yr-cent" />' );
- yBody.append(cont);
- for ( i = 0 ; i < 10 ; i++ )
- this.btn( cont, i, this.newYPos,['cent','cent'+i],this.lY+' '+i+'00');
- yW += cont.AnyTime_width(true);
- if ( yH < cont.AnyTime_height(true) )
- yH = cont.AnyTime_height(true);
+ askYear: function( event )
+ {
+ if ( ! this.yDiv )
+ {
+ this.makeCloak();
+
+ this.yDiv = $('<div class="AnyTime-win AnyTime-yr-selector ui-widget ui-widget-content ui-corner-all" style="position:absolute" />');
+ this.div.append(this.yDiv);
+
+ var title = $('<h5 class="AnyTime-hdr AnyTime-hdr-yr-selector ui-widget-header ui-corner-top" />');
+ this.yDiv.append( title );
+
+ var xDiv = $('<div class="AnyTime-x-btn ui-state-default">'+this.lX+'</div>');
+ title.append(xDiv);
+ xDiv.click(function(e){_this.dismissYDiv(e);});
+
+ title.append( this.lY );
+
+ var yBody = $('<div class="AnyTime-body AnyTime-body-yr-selector" />');
+ var yW = yBody.AnyTime_width(true);
+ var yH = 0;
+ this.yDiv.append( yBody );
+
+ cont = $('<ul class="AnyTime-yr-mil" />' );
+ yBody.append(cont);
+ this.y0XXX = this.btn( cont, 0, this.newYPos,['mil','mil0'],this.lY+' '+0+'000');
+ for ( i = 1; i < 10 ; i++ )
+ this.btn( cont, i, this.newYPos,['mil','mil'+i],this.lY+' '+i+'000');
+ yW += cont.AnyTime_width(true);
+ if ( yH < cont.AnyTime_height(true) )
+ yH = cont.AnyTime_height(true);
+
+ cont = $('<ul class="AnyTime-yr-cent" />' );
+ yBody.append(cont);
+ for ( i = 0 ; i < 10 ; i++ )
+ this.btn( cont, i, this.newYPos,['cent','cent'+i],this.lY+' '+i+'00');
+ yW += cont.AnyTime_width(true);
+ if ( yH < cont.AnyTime_height(true) )
+ yH = cont.AnyTime_height(true);
- cont = $('<ul class="AnyTime-yr-dec" />');
- yBody.append(cont);
- for ( i = 0 ; i < 10 ; i++ )
- this.btn( cont, i, this.newYPos,['dec','dec'+i],this.lY+' '+i+'0');
- yW += cont.AnyTime_width(true);
- if ( yH < cont.AnyTime_height(true) )
- yH = cont.AnyTime_height(true);
-
- cont = $('<ul class="AnyTime-yr-yr" />');
- yBody.append(cont);
- for ( i = 0 ; i < 10 ; i++ )
- this.btn( cont, i, this.newYPos,['yr','yr'+i],this.lY+' '+i );
- yW += cont.AnyTime_width(true);
- if ( yH < cont.AnyTime_height(true) )
- yH = cont.AnyTime_height(true);
-
- if ( this.askEra )
- {
- cont = $('<ul class="AnyTime-yr-era" />' );
- yBody.append(cont);
-
- this.btn( cont, this.conv.eAbbr[0],
- function( event )
- {
- var t = new Date(this.time.getTime());
- var year = t.getFullYear();
- if ( year > 0 )
- t.setFullYear(0-year);
- this.set(t);
- this.updYDiv($(event.target));
- },
- ['era','bce'], this.conv.eAbbr[0] );
-
- this.btn( cont, this.conv.eAbbr[1],
- function( event )
- {
- var t = new Date(this.time.getTime());
- var year = t.getFullYear();
- if ( year < 0 )
- t.setFullYear(0-year);
- this.set(t);
- this.updYDiv($(event.target));
- },
- ['era','ce'], this.conv.eAbbr[1] );
-
- yW += cont.AnyTime_width(true);
- if ( yH < cont.AnyTime_height(true) )
- yH = cont.AnyTime_height(true);
+ cont = $('<ul class="AnyTime-yr-dec" />');
+ yBody.append(cont);
+ for ( i = 0 ; i < 10 ; i++ )
+ this.btn( cont, i, this.newYPos,['dec','dec'+i],this.lY+' '+i+'0');
+ yW += cont.AnyTime_width(true);
+ if ( yH < cont.AnyTime_height(true) )
+ yH = cont.AnyTime_height(true);
+
+ cont = $('<ul class="AnyTime-yr-yr" />');
+ yBody.append(cont);
+ for ( i = 0 ; i < 10 ; i++ )
+ this.btn( cont, i, this.newYPos,['yr','yr'+i],this.lY+' '+i );
+ yW += cont.AnyTime_width(true);
+ if ( yH < cont.AnyTime_height(true) )
+ yH = cont.AnyTime_height(true);
+
+ if ( this.askEra )
+ {
+ cont = $('<ul class="AnyTime-yr-era" />' );
+ yBody.append(cont);
+
+ this.btn( cont, this.conv.eAbbr[0],
+ function( event )
+ {
+ var t = new Date(this.time.getTime());
+ var year = t.getFullYear();
+ if ( year > 0 )
+ t.setFullYear(0-year);
+ this.set(t);
+ this.updYDiv($(event.target));
+ },
+ ['era','bce'], this.conv.eAbbr[0] );
+
+ this.btn( cont, this.conv.eAbbr[1],
+ function( event )
+ {
+ var t = new Date(this.time.getTime());
+ var year = t.getFullYear();
+ if ( year < 0 )
+ t.setFullYear(0-year);
+ this.set(t);
+ this.updYDiv($(event.target));
+ },
+ ['era','ce'], this.conv.eAbbr[1] );
+
+ yW += cont.AnyTime_width(true);
+ if ( yH < cont.AnyTime_height(true) )
+ yH = cont.AnyTime_height(true);
- } // if ( this.askEra )
+ } // if ( this.askEra )
- if ( $.browser.msie ) // IE8+ThemeUI bug!
- yW += 1;
- else if ( $.browser.safari ) // Safari small-text bug!
- yW += 2;
- yH += yBody.AnyTime_height(true);
- yBody.css('width',String(yW)+'px');
- if ( ! __msie7 ) // IE7 bug!
- yBody.css('height',String(yH)+'px');
- if ( __msie6 || __msie7 ) // IE bugs!
- title.width(yBody.outerWidth(true));
- yH += title.AnyTime_height(true);
- if ( title.AnyTime_width(true) > yW )
- yW = title.AnyTime_width(true);
- this.yDiv.css('width',String(yW)+'px');
- if ( ! __msie7 ) // IE7 bug!
- this.yDiv.css('height',String(yH)+'px');
-
- } // if ( ! this.yDiv )
- else
- {
- this.cloak.show();
- this.yDiv.show();
- }
- this.pos(event);
- this.updYDiv(null);
- this.setFocus( this.yDiv.find('.AnyTime-yr-btn.AnyTime-cur-btn:first') );
-
- }, // .askYear()
+ if ( $.browser.msie ) // IE8+ThemeUI bug!
+ yW += 1;
+ else if ( $.browser.safari ) // Safari small-text bug!
+ yW += 2;
+ yH += yBody.AnyTime_height(true);
+ yBody.css('width',String(yW)+'px');
+ if ( ! __msie7 ) // IE7 bug!
+ yBody.css('height',String(yH)+'px');
+ if ( __msie6 || __msie7 ) // IE bugs!
+ title.width(yBody.outerWidth(true));
+ yH += title.AnyTime_height(true);
+ if ( title.AnyTime_width(true) > yW )
+ yW = title.AnyTime_width(true);
+ this.yDiv.css('width',String(yW)+'px');
+ if ( ! __msie7 ) // IE7 bug!
+ this.yDiv.css('height',String(yH)+'px');
+
+ } // if ( ! this.yDiv )
+ else
+ {
+ this.cloak.show();
+ this.yDiv.show();
+ }
+ this.pos(event);
+ this.updYDiv(null);
+ this.setFocus( this.yDiv.find('.AnyTime-yr-btn.AnyTime-cur-btn:first') );
+
+ }, // .askYear()
- //---------------------------------------------------------------------
- // .inpBlur() is called when a picker's input loses focus to dismiss
- // the popup. A 1/3 second delay is necessary to restore focus if
- // the div is clicked (shorter delays don't always work!) To prevent
- // problems cause by scrollbar focus (except in FF), focus is
- // force-restored if the offset div is visible.
- //---------------------------------------------------------------------
+ //---------------------------------------------------------------------
+ // .inpBlur() is called when a picker's input loses focus to dismiss
+ // the popup. A 1/3 second delay is necessary to restore focus if
+ // the div is clicked (shorter delays don't always work!) To prevent
+ // problems cause by scrollbar focus (except in FF), focus is
+ // force-restored if the offset div is visible.
+ //---------------------------------------------------------------------
- inpBlur: function(event)
- {
- if ( this.oDiv && this.oDiv.is(":visible") )
- {
- _this.inp.focus();
- return;
- }
- this.lostFocus = true;
- setTimeout(
- function()
- {
- if ( _this.lostFocus )
- {
- _this.div.find('.AnyTime-focus-btn').removeClass('AnyTime-focus-btn ui-state-focus');
- if ( _this.pop )
- _this.dismiss(event);
- else
- _this.ajax();
- }
- }, 334 );
- },
-
- //---------------------------------------------------------------------
- // .btn() is called by AnyTime.picker() to create a <div> element
- // containing an <a> element. The elements are given appropriate
- // classes based on the specified "classes" (an array of strings).
- // The specified "text" and "title" are used for the <a> element.
- // The "handler" is bound to click events for the <div>, which will
- // catch bubbling clicks from the <a> as well. The button is
- // appended to the specified parent (jQuery), and the <div> jQuery
- // is returned.
- //---------------------------------------------------------------------
-
- btn: function( parent, text, handler, classes, title )
- {
- var tagName = ( (parent[0].nodeName.toLowerCase()=='ul')?'li':'td');
- var div$ = '<' + tagName +
- ' class="AnyTime-btn';
- for ( var i = 0 ; i < classes.length ; i++ )
- div$ += ' AnyTime-' + classes[i] + '-btn';
- var div = $( div$ + ' ui-state-default">' + text + '</' + tagName + '>' );
- parent.append(div);
- div.AnyTime_title = title;
-
- div.click(
- function(e)
- {
- // bind the handler to the picker so "this" is correct
- _this.tempFunc = handler;
- _this.tempFunc(e);
- });
- div.dblclick(
- function(e)
- {
- var elem = $(this);
- if ( elem.is('.AnyTime-off-off-btn') )
- _this.dismissODiv(e);
- else if ( elem.is('.AnyTime-mil-btn') || elem.is('.AnyTime-cent-btn') || elem.is('.AnyTime-dec-btn') || elem.is('.AnyTime-yr-btn') || elem.is('.AnyTime-era-btn') )
- _this.dismissYDiv(e);
- else if ( _this.pop )
- _this.dismiss(e);
- });
- return div;
-
- }, // .btn()
-
- //---------------------------------------------------------------------
- // .cleanup() destroys the DOM events and elements associated with
- // the picker so it can be deleted.
- //---------------------------------------------------------------------
-
- cleanup: function(event)
- {
- this.inp.unbind('blur',this.hBlur);
- this.inp.unbind('click',this.hClick);
- this.inp.unbind('focus',this.hFocus);
- this.inp.unbind('keydown',this.hKeydown);
- this.inp.unbind('keypress',this.hKeypress);
- this.div.remove();
- },
-
- //---------------------------------------------------------------------
- // .dismiss() dismisses a popup picker.
- //---------------------------------------------------------------------
-
- dismiss: function(event)
- {
- this.ajax();
- this.div.hide();
- if ( __iframe )
- __iframe.hide();
- if ( this.yDiv )
- this.dismissYDiv();
- if ( this.oDiv )
- this.dismissODiv();
- this.lostFocus = true;
- },
-
- //---------------------------------------------------------------------
- // .dismissODiv() dismisses the UTC offset selector popover.
- //---------------------------------------------------------------------
-
- dismissODiv: function(event)
- {
- this.oDiv.hide();
- this.cloak.hide();
- this.setFocus(this.oCur);
- },
-
- //---------------------------------------------------------------------
- // .dismissYDiv() dismisses the date selector popover.
- //---------------------------------------------------------------------
-
- dismissYDiv: function(event)
- {
- this.yDiv.hide();
- this.cloak.hide();
- this.setFocus(this.yCur);
- },
-
- //---------------------------------------------------------------------
- // .setFocus() makes a specified psuedo-button appear to get focus.
- //---------------------------------------------------------------------
-
- setFocus: function(btn)
- {
- if ( ! btn.hasClass('AnyTime-focus-btn') )
- {
- this.div.find('.AnyTime-focus-btn').removeClass('AnyTime-focus-btn ui-state-focus');
- this.fBtn = btn;
- btn.removeClass('ui-state-default ui-state-highlight');
- btn.addClass('AnyTime-focus-btn ui-state-default ui-state-highlight ui-state-focus');
- }
- if ( btn.hasClass('AnyTime-off-off-btn') )
- {
- var oBT = this.oBody.offset().top;
- var btnT = btn.offset().top;
- var btnH = btn.AnyTime_height(true);
- if ( btnT - btnH < oBT ) // move a page up
- this.oBody.scrollTop( btnT + this.oBody.scrollTop() - ( this.oBody.innerHeight() + oBT ) + ( btnH * 2 ) );
- else if ( btnT + btnH > oBT + this.oBody.innerHeight() ) // move a page down
- this.oBody.scrollTop( ( btnT + this.oBody.scrollTop() ) - ( oBT + btnH ) );
- }
- },
-
- //---------------------------------------------------------------------
- // .key() is invoked when a user presses a key while the picker's
- // input has focus. A psuedo-button is considered "in focus" and an
- // appropriate action is performed according to the WAI-ARIA Authoring
- // Practices 1.0 for datepicker from
- // www.w3.org/TR/2009/WD-wai-aria-practices-20091215/#datepicker:
- //
- // * LeftArrow moves focus left, continued to previous week.
- // * RightArrow moves focus right, continued to next week.
- // * UpArrow moves focus to the same weekday in the previous week.
- // * DownArrow moves focus to same weekday in the next week.
- // * PageUp moves focus to same day in the previous month.
- // * PageDown moves focus to same day in the next month.
- // * Shift+Page Up moves focus to same day in the previous year.
- // * Shift+Page Down moves focus to same day in the next year.
- // * Home moves focus to the first day of the month.
- // * End moves focus to the last day of the month.
- // * Ctrl+Home moves focus to the first day of the year.
- // * Ctrl+End moves focus to the last day of the year.
- // * Esc closes a DatePicker that is opened as a Popup.
- //
- // The following actions (for multiple-date selection) are NOT
- // supported:
- // * Shift+Arrow performs continous selection.
- // * Ctrl+Space multiple selection of certain days.
- //
- // The authoring practices do not specify behavior for a time picker,
- // or for month-and-year pickers that do not have a day-of-the-month,
- // but AnyTime.picker uses the following behavior to be as consistent
- // as possible with the defined datepicker functionality:
- // * LeftArrow moves focus left or up to previous value or field.
- // * RightArrow moves focus right or down to next value or field.
- // * UpArrow moves focus up or left to previous value or field.
- // * DownArrow moves focus down or right to next value or field
- // * PageUp moves focus to the current value in the previous units
- // (for example, from ten-minutes to hours or one-minutes to
- // ten-minutes or months to years).
- // * PageDown moves focus to the current value in the next units
- // (for example, from hours to ten-minutes or ten-minutes to
- // one-minutes or years to months).
- // * Home moves the focus to the first unit button.
- // * End moves the focus to the last unit button.
- //
- // In addition, Tab and Shift+Tab move between units (including to/
- // from the Day-of-Month table) and also in/out of the picker.
- //
- // Because AnyTime.picker sets a value as soon as the button receives
- // focus, SPACE and ENTER are not needed (the WAI-ARIA guidelines use
- // them to select a value.
- //---------------------------------------------------------------------
-
- key: function(event)
- {
- var t = null;
- var elem = this.div.find('.AnyTime-focus-btn');
- var key = event.keyCode || event.which;
- this.denyTab = true;
+ inpBlur: function(event)
+ {
+ if ( this.oDiv && this.oDiv.is(":visible") )
+ {
+ _this.inp.focus();
+ return;
+ }
+ this.lostFocus = true;
+ setTimeout(
+ function()
+ {
+ if ( _this.lostFocus )
+ {
+ _this.div.find('.AnyTime-focus-btn').removeClass('AnyTime-focus-btn ui-state-focus');
+ if ( _this.pop )
+ _this.dismiss(event);
+ else
+ _this.ajax();
+ }
+ }, 334 );
+ },
+
+ //---------------------------------------------------------------------
+ // .btn() is called by AnyTime.picker() to create a <div> element
+ // containing an <a> element. The elements are given appropriate
+ // classes based on the specified "classes" (an array of strings).
+ // The specified "text" and "title" are used for the <a> element.
+ // The "handler" is bound to click events for the <div>, which will
+ // catch bubbling clicks from the <a> as well. The button is
+ // appended to the specified parent (jQuery), and the <div> jQuery
+ // is returned.
+ //---------------------------------------------------------------------
+
+ btn: function( parent, text, handler, classes, title )
+ {
+ var tagName = ( (parent[0].nodeName.toLowerCase()=='ul')?'li':'td');
+ var div$ = '<' + tagName +
+ ' class="AnyTime-btn';
+ for ( var i = 0 ; i < classes.length ; i++ )
+ div$ += ' AnyTime-' + classes[i] + '-btn';
+ var div = $( div$ + ' ui-state-default">' + text + '</' + tagName + '>' );
+ parent.append(div);
+ div.AnyTime_title = title;
+
+ div.click(
+ function(e)
+ {
+ // bind the handler to the picker so "this" is correct
+ _this.tempFunc = handler;
+ _this.tempFunc(e);
+ });
+ div.dblclick(
+ function(e)
+ {
+ var elem = $(this);
+ if ( elem.is('.AnyTime-off-off-btn') )
+ _this.dismissODiv(e);
+ else if ( elem.is('.AnyTime-mil-btn') || elem.is('.AnyTime-cent-btn') || elem.is('.AnyTime-dec-btn') || elem.is('.AnyTime-yr-btn') || elem.is('.AnyTime-era-btn') )
+ _this.dismissYDiv(e);
+ else if ( _this.pop )
+ _this.dismiss(e);
+ });
+ return div;
+
+ }, // .btn()
+
+ //---------------------------------------------------------------------
+ // .cleanup() destroys the DOM events and elements associated with
+ // the picker so it can be deleted.
+ //---------------------------------------------------------------------
+
+ cleanup: function(event)
+ {
+ this.inp.unbind('blur',this.hBlur);
+ this.inp.unbind('click',this.hClick);
+ this.inp.unbind('focus',this.hFocus);
+ this.inp.unbind('keydown',this.hKeydown);
+ this.inp.unbind('keypress',this.hKeypress);
+ this.div.remove();
+ },
+
+ //---------------------------------------------------------------------
+ // .dismiss() dismisses a popup picker.
+ //---------------------------------------------------------------------
+
+ dismiss: function(event)
+ {
+ this.ajax();
+ this.div.hide();
+ if ( __iframe )
+ __iframe.hide();
+ if ( this.yDiv )
+ this.dismissYDiv();
+ if ( this.oDiv )
+ this.dismissODiv();
+ this.lostFocus = true;
+ },
+
+ //---------------------------------------------------------------------
+ // .dismissODiv() dismisses the UTC offset selector popover.
+ //---------------------------------------------------------------------
+
+ dismissODiv: function(event)
+ {
+ this.oDiv.hide();
+ this.cloak.hide();
+ this.setFocus(this.oCur);
+ },
+
+ //---------------------------------------------------------------------
+ // .dismissYDiv() dismisses the date selector popover.
+ //---------------------------------------------------------------------
+
+ dismissYDiv: function(event)
+ {
+ this.yDiv.hide();
+ this.cloak.hide();
+ this.setFocus(this.yCur);
+ },
+
+ //---------------------------------------------------------------------
+ // .setFocus() makes a specified psuedo-button appear to get focus.
+ //---------------------------------------------------------------------
+
+ setFocus: function(btn)
+ {
+ if ( ! btn.hasClass('AnyTime-focus-btn') )
+ {
+ this.div.find('.AnyTime-focus-btn').removeClass('AnyTime-focus-btn ui-state-focus');
+ this.fBtn = btn;
+ btn.removeClass('ui-state-default ui-state-highlight');
+ btn.addClass('AnyTime-focus-btn ui-state-default ui-state-highlight ui-state-focus');
+ }
+ if ( btn.hasClass('AnyTime-off-off-btn') )
+ {
+ var oBT = this.oBody.offset().top;
+ var btnT = btn.offset().top;
+ var btnH = btn.AnyTime_height(true);
+ if ( btnT - btnH < oBT ) // move a page up
+ this.oBody.scrollTop( btnT + this.oBody.scrollTop() - ( this.oBody.innerHeight() + oBT ) + ( btnH * 2 ) );
+ else if ( btnT + btnH > oBT + this.oBody.innerHeight() ) // move a page down
+ this.oBody.scrollTop( ( btnT + this.oBody.scrollTop() ) - ( oBT + btnH ) );
+ }
+ },
+
+ //---------------------------------------------------------------------
+ // .key() is invoked when a user presses a key while the picker's
+ // input has focus. A psuedo-button is considered "in focus" and an
+ // appropriate action is performed according to the WAI-ARIA Authoring
+ // Practices 1.0 for datepicker from
+ // www.w3.org/TR/2009/WD-wai-aria-practices-20091215/#datepicker:
+ //
+ // * LeftArrow moves focus left, continued to previous week.
+ // * RightArrow moves focus right, continued to next week.
+ // * UpArrow moves focus to the same weekday in the previous week.
+ // * DownArrow moves focus to same weekday in the next week.
+ // * PageUp moves focus to same day in the previous month.
+ // * PageDown moves focus to same day in the next month.
+ // * Shift+Page Up moves focus to same day in the previous year.
+ // * Shift+Page Down moves focus to same day in the next year.
+ // * Home moves focus to the first day of the month.
+ // * End moves focus to the last day of the month.
+ // * Ctrl+Home moves focus to the first day of the year.
+ // * Ctrl+End moves focus to the last day of the year.
+ // * Esc closes a DatePicker that is opened as a Popup.
+ //
+ // The following actions (for multiple-date selection) are NOT
+ // supported:
+ // * Shift+Arrow performs continous selection.
+ // * Ctrl+Space multiple selection of certain days.
+ //
+ // The authoring practices do not specify behavior for a time picker,
+ // or for month-and-year pickers that do not have a day-of-the-month,
+ // but AnyTime.picker uses the following behavior to be as consistent
+ // as possible with the defined datepicker functionality:
+ // * LeftArrow moves focus left or up to previous value or field.
+ // * RightArrow moves focus right or down to next value or field.
+ // * UpArrow moves focus up or left to previous value or field.
+ // * DownArrow moves focus down or right to next value or field
+ // * PageUp moves focus to the current value in the previous units
+ // (for example, from ten-minutes to hours or one-minutes to
+ // ten-minutes or months to years).
+ // * PageDown moves focus to the current value in the next units
+ // (for example, from hours to ten-minutes or ten-minutes to
+ // one-minutes or years to months).
+ // * Home moves the focus to the first unit button.
+ // * End moves the focus to the last unit button.
+ //
+ // In addition, Tab and Shift+Tab move between units (including to/
+ // from the Day-of-Month table) and also in/out of the picker.
+ //
+ // Because AnyTime.picker sets a value as soon as the button receives
+ // focus, SPACE and ENTER are not needed (the WAI-ARIA guidelines use
+ // them to select a value.
+ //---------------------------------------------------------------------
+
+ key: function(event)
+ {
+ var mo;
+ var t = null;
+ var elem = this.div.find('.AnyTime-focus-btn');
+ var key = event.keyCode || event.which;
+ this.denyTab = true;
- if ( key == 16 ) // Shift
- {
- }
- else if ( ( key == 10 ) || ( key == 13 ) || ( key == 27 ) ) // Enter & Esc
- {
- if ( this.oDiv && this.oDiv.is(':visible') )
- this.dismissODiv(event);
- else if ( this.yDiv && this.yDiv.is(':visible') )
- this.dismissYDiv(event);
- else if ( this.pop )
- this.dismiss(event);
- }
- else if ( ( key == 33 ) || ( ( key == 9 ) && event.shiftKey ) ) // PageUp & Shift+Tab
- {
- if ( this.fBtn.hasClass('AnyTime-off-off-btn') )
- {
- if ( key == 9 )
- this.dismissODiv(event);
- }
- else if ( this.fBtn.hasClass('AnyTime-mil-btn') )
- {
- if ( key == 9 )
- this.dismissYDiv(event);
- }
- else if ( this.fBtn.hasClass('AnyTime-cent-btn') )
- this.yDiv.find('.AnyTime-mil-btn.AnyTime-cur-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-dec-btn') )
- this.yDiv.find('.AnyTime-cent-btn.AnyTime-cur-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-yr-btn') )
- this.yDiv.find('.AnyTime-dec-btn.AnyTime-cur-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-era-btn') )
- this.yDiv.find('.AnyTime-yr-btn.AnyTime-cur-btn').triggerHandler('click');
- else if ( this.fBtn.parents('.AnyTime-yrs').length )
- {
- if ( key == 9 )
- {
- this.denyTab = false;
- return;
- }
- }
- else if ( this.fBtn.hasClass('AnyTime-mon-btn') )
- {
- if ( this.dY )
- this.yCur.triggerHandler('click');
- else if ( key == 9 )
- {
- this.denyTab = false;
- return;
- }
- }
- else if ( this.fBtn.hasClass('AnyTime-dom-btn') )
- {
- if ( ( key == 9 ) && event.shiftKey ) // Shift+Tab
- {
- this.denyTab = false;
- return;
- }
- else // PageUp
- {
- t = new Date(this.time.getTime());
- if ( event.shiftKey )
- t.setFullYear(t.getFullYear()-1);
- else
- {
- var mo = t.getMonth()-1;
- if ( t.getDate() > __daysIn[mo] )
- t.setDate(__daysIn[mo])
- t.setMonth(mo);
- }
- this.keyDateChange(t);
- }
- }
- else if ( this.fBtn.hasClass('AnyTime-hr-btn') )
- {
- t = this.dDoM || this.dMo;
- if ( t )
- t.AnyTime_clickCurrent();
- else if ( this.dY )
- this.yCur.triggerHandler('click');
- else if ( key == 9 )
- {
- this.denyTab = false;
- return;
- }
- }
- else if ( this.fBtn.hasClass('AnyTime-min-ten-btn') )
- {
- t = this.dH || this.dDoM || this.dMo;
- if ( t )
- t.AnyTime_clickCurrent();
- else if ( this.dY )
- this.yCur.triggerHandler('click');
- else if ( key == 9 )
- {
- this.denyTab = false;
- return;
- }
- }
- else if ( this.fBtn.hasClass('AnyTime-min-one-btn') )
- this.dM.AnyTime_clickCurrent();
- else if ( this.fBtn.hasClass('AnyTime-sec-ten-btn') )
- {
- if ( this.dM )
- t = this.dM.find('.AnyTime-mins-ones');
- else
- t = this.dH || this.dDoM || this.dMo;
- if ( t )
- t.AnyTime_clickCurrent();
- else if ( this.dY )
- this.yCur.triggerHandler('click');
- else if ( key == 9 )
- {
- this.denyTab = false;
- return;
- }
- }
- else if ( this.fBtn.hasClass('AnyTime-sec-one-btn') )
- this.dS.AnyTime_clickCurrent();
- else if ( this.fBtn.hasClass('AnyTime-off-btn') )
- {
- if ( this.dS )
- t = this.dS.find('.AnyTime-secs-ones');
- else if ( this.dM )
- t = this.dM.find('.AnyTime-mins-ones');
- else
- t = this.dH || this.dDoM || this.dMo;
- if ( t )
- t.AnyTime_clickCurrent();
- else if ( this.dY )
- this.yCur.triggerHandler('click');
- else if ( key == 9 )
- {
- this.denyTab = false;
- return;
- }
- }
- }
- else if ( ( key == 34 ) || ( key == 9 ) ) // PageDown or Tab
- {
- if ( this.fBtn.hasClass('AnyTime-mil-btn') )
- this.yDiv.find('.AnyTime-cent-btn.AnyTime-cur-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-cent-btn') )
- this.yDiv.find('.AnyTime-dec-btn.AnyTime-cur-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-dec-btn') )
- this.yDiv.find('.AnyTime-yr-btn.AnyTime-cur-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-yr-btn') )
- {
- t = this.yDiv.find('.AnyTime-era-btn.AnyTime-cur-btn');
- if ( t.length )
- t.triggerHandler('click');
- else if ( key == 9 )
- this.dismissYDiv(event);
- }
- else if ( this.fBtn.hasClass('AnyTime-era-btn') )
- {
- if ( key == 9 )
- this.dismissYDiv(event);
- }
- else if ( this.fBtn.hasClass('AnyTime-off-off-btn') )
- {
- if ( key == 9 )
- this.dismissODiv(event);
- }
- else if ( this.fBtn.parents('.AnyTime-yrs').length )
- {
- t = this.dDoM || this.dMo || this.dH || this.dM || this.dS || this.dO;
- if ( t )
- t.AnyTime_clickCurrent();
- else if ( key == 9 )
- {
- this.denyTab = false;
- return;
- }
- }
- else if ( this.fBtn.hasClass('AnyTime-mon-btn') )
- {
- t = this.dDoM || this.dH || this.dM || this.dS || this.dO;
- if ( t )
- t.AnyTime_clickCurrent();
- else if ( key == 9 )
- {
- this.denyTab = false;
- return;
- }
- }
- else if ( this.fBtn.hasClass('AnyTime-dom-btn') )
- {
- if ( key == 9 ) // Tab
- {
- t = this.dH || this.dM || this.dS || this.dO;
- if ( t )
- t.AnyTime_clickCurrent();
- else
- {
- this.denyTab = false;
- return;
- }
- }
- else // PageDown
- {
- t = new Date(this.time.getTime());
- if ( event.shiftKey )
- t.setFullYear(t.getFullYear()+1);
- else
- {
- var mo = t.getMonth()+1;
- if ( t.getDate() > __daysIn[mo] )
- t.setDate(__daysIn[mo])
- t.setMonth(mo);
- }
- this.keyDateChange(t);
- }
- }
- else if ( this.fBtn.hasClass('AnyTime-hr-btn') )
- {
- t = this.dM || this.dS || this.dO;
- if ( t )
- t.AnyTime_clickCurrent();
- else if ( key == 9 )
- {
- this.denyTab = false;
- return;
- }
- }
- else if ( this.fBtn.hasClass('AnyTime-min-ten-btn') )
- this.dM.find('.AnyTime-mins-ones .AnyTime-cur-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-min-one-btn') )
- {
- t = this.dS || this.dO;
- if ( t )
- t.AnyTime_clickCurrent();
- else if ( key == 9 )
- {
- this.denyTab = false;
- return;
- }
- }
- else if ( this.fBtn.hasClass('AnyTime-sec-ten-btn') )
- this.dS.find('.AnyTime-secs-ones .AnyTime-cur-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-sec-one-btn') )
- {
- if ( this.dO )
- this.dO.AnyTime_clickCurrent();
- else if ( key == 9 )
- {
- this.denyTab = false;
- return;
- }
- }
- else if ( this.fBtn.hasClass('AnyTime-off-btn') )
- {
- if ( key == 9 )
- {
- this.denyTab = false;
- return;
- }
- }
- }
- else if ( key == 35 ) // END
- {
- if ( this.fBtn.hasClass('AnyTime-mil-btn') || this.fBtn.hasClass('AnyTime-cent-btn') ||
- this.fBtn.hasClass('AnyTime-dec-btn') || this.fBtn.hasClass('AnyTime-yr-btn') ||
- this.fBtn.hasClass('AnyTime-era-btn') )
- {
- t = this.yDiv.find('.AnyTime-ce-btn');
- if ( ! t.length )
- t = this.yDiv.find('.AnyTime-yr9-btn');
- t.triggerHandler('click');
- }
- else if ( this.fBtn.hasClass('AnyTime-dom-btn') )
- {
- t = new Date(this.time.getTime());
- t.setDate(1);
- t.setMonth(t.getMonth()+1);
- t.setDate(t.getDate()-1);
- if ( event.ctrlKey )
- t.setMonth(11);
- this.keyDateChange(t);
- }
- else if ( this.dS )
- this.dS.find('.AnyTime-sec9-btn').triggerHandler('click');
- else if ( this.dM )
- this.dM.find('.AnyTime-min9-btn').triggerHandler('click');
- else if ( this.dH )
- this.dH.find('.AnyTime-hr23-btn').triggerHandler('click');
- else if ( this.dDoM )
- this.dDoM.find('.AnyTime-dom-btn-filled:last').triggerHandler('click');
- else if ( this.dMo )
- this.dMo.find('.AnyTime-mon12-btn').triggerHandler('click');
- else if ( this.dY )
- this.yAhead.triggerHandler('click');
- }
- else if ( key == 36 ) // HOME
- {
- if ( this.fBtn.hasClass('AnyTime-mil-btn') || this.fBtn.hasClass('AnyTime-cent-btn') ||
- this.fBtn.hasClass('AnyTime-dec-btn') || this.fBtn.hasClass('AnyTime-yr-btn') ||
- this.fBtn.hasClass('AnyTime-era-btn') )
- {
- this.yDiv.find('.AnyTime-mil0-btn').triggerHandler('click');
- }
- else if ( this.fBtn.hasClass('AnyTime-dom-btn') )
- {
- t = new Date(this.time.getTime());
- t.setDate(1);
- if ( event.ctrlKey )
- t.setMonth(0);
- this.keyDateChange(t);
- }
- else if ( this.dY )
- this.yCur.triggerHandler('click');
- else if ( this.dMo )
- this.dMo.find('.AnyTime-mon1-btn').triggerHandler('click');
- else if ( this.dDoM )
- this.dDoM.find('.AnyTime-dom-btn-filled:first').triggerHandler('click');
- else if ( this.dH )
- this.dH.find('.AnyTime-hr0-btn').triggerHandler('click');
- else if ( this.dM )
- this.dM.find('.AnyTime-min00-btn').triggerHandler('click');
- else if ( this.dS )
- this.dS.find('.AnyTime-sec00-btn').triggerHandler('click');
- }
- else if ( key == 37 ) // left arrow
- {
- if ( this.fBtn.hasClass('AnyTime-dom-btn') )
- this.keyDateChange(new Date(this.time.getTime()-__oneDay));
- else
- this.keyBack();
- }
- else if ( key == 38 ) // up arrow
- {
- if ( this.fBtn.hasClass('AnyTime-dom-btn') )
- this.keyDateChange(new Date(this.time.getTime()-(7*__oneDay)));
- else
- this.keyBack();
- }
- else if ( key == 39 ) // right arrow
- {
- if ( this.fBtn.hasClass('AnyTime-dom-btn') )
- this.keyDateChange(new Date(this.time.getTime()+__oneDay));
- else
- this.keyAhead();
- }
- else if ( key == 40 ) // down arrow
- {
- if ( this.fBtn.hasClass('AnyTime-dom-btn') )
- this.keyDateChange(new Date(this.time.getTime()+(7*__oneDay)));
- else
- this.keyAhead();
- }
- else if ( ( ( key == 86 ) || ( key == 118 ) ) && event.ctrlKey )
- {
- this.inp.val("").change();
- var _this = this;
- setTimeout( function() { _this.showPkr(null); }, 100 );
- return;
- }
- else
- this.showPkr(null);
+ if ( key == 16 ) // Shift
+ {
+ }
+ else if ( ( key == 10 ) || ( key == 13 ) || ( key == 27 ) ) // Enter & Esc
+ {
+ if ( this.oDiv && this.oDiv.is(':visible') )
+ this.dismissODiv(event);
+ else if ( this.yDiv && this.yDiv.is(':visible') )
+ this.dismissYDiv(event);
+ else if ( this.pop )
+ this.dismiss(event);
+ }
+ else if ( ( key == 33 ) || ( ( key == 9 ) && event.shiftKey ) ) // PageUp & Shift+Tab
+ {
+ if ( this.fBtn.hasClass('AnyTime-off-off-btn') )
+ {
+ if ( key == 9 )
+ this.dismissODiv(event);
+ }
+ else if ( this.fBtn.hasClass('AnyTime-mil-btn') )
+ {
+ if ( key == 9 )
+ this.dismissYDiv(event);
+ }
+ else if ( this.fBtn.hasClass('AnyTime-cent-btn') )
+ this.yDiv.find('.AnyTime-mil-btn.AnyTime-cur-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-dec-btn') )
+ this.yDiv.find('.AnyTime-cent-btn.AnyTime-cur-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-yr-btn') )
+ this.yDiv.find('.AnyTime-dec-btn.AnyTime-cur-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-era-btn') )
+ this.yDiv.find('.AnyTime-yr-btn.AnyTime-cur-btn').triggerHandler('click');
+ else if ( this.fBtn.parents('.AnyTime-yrs').length )
+ {
+ if ( key == 9 )
+ {
+ this.denyTab = false;
+ return;
+ }
+ }
+ else if ( this.fBtn.hasClass('AnyTime-mon-btn') )
+ {
+ if ( this.dY )
+ this.yCur.triggerHandler('click');
+ else if ( key == 9 )
+ {
+ this.denyTab = false;
+ return;
+ }
+ }
+ else if ( this.fBtn.hasClass('AnyTime-dom-btn') )
+ {
+ if ( ( key == 9 ) && event.shiftKey ) // Shift+Tab
+ {
+ this.denyTab = false;
+ return;
+ }
+ else // PageUp
+ {
+ t = new Date(this.time.getTime());
+ if ( event.shiftKey )
+ t.setFullYear(t.getFullYear()-1);
+ else
+ {
+ mo = t.getMonth()-1;
+ if ( t.getDate() > __daysIn[mo] )
+ t.setDate(__daysIn[mo])
+ t.setMonth(mo);
+ }
+ this.keyDateChange(t);
+ }
+ }
+ else if ( this.fBtn.hasClass('AnyTime-hr-btn') )
+ {
+ t = this.dDoM || this.dMo;
+ if ( t )
+ t.AnyTime_clickCurrent();
+ else if ( this.dY )
+ this.yCur.triggerHandler('click');
+ else if ( key == 9 )
+ {
+ this.denyTab = false;
+ return;
+ }
+ }
+ else if ( this.fBtn.hasClass('AnyTime-min-ten-btn') )
+ {
+ t = this.dH || this.dDoM || this.dMo;
+ if ( t )
+ t.AnyTime_clickCurrent();
+ else if ( this.dY )
+ this.yCur.triggerHandler('click');
+ else if ( key == 9 )
+ {
+ this.denyTab = false;
+ return;
+ }
+ }
+ else if ( this.fBtn.hasClass('AnyTime-min-one-btn') )
+ this.dM.AnyTime_clickCurrent();
+ else if ( this.fBtn.hasClass('AnyTime-sec-ten-btn') )
+ {
+ if ( this.dM )
+ t = this.dM.find('.AnyTime-mins-ones');
+ else
+ t = this.dH || this.dDoM || this.dMo;
+ if ( t )
+ t.AnyTime_clickCurrent();
+ else if ( this.dY )
+ this.yCur.triggerHandler('click');
+ else if ( key == 9 )
+ {
+ this.denyTab = false;
+ return;
+ }
+ }
+ else if ( this.fBtn.hasClass('AnyTime-sec-one-btn') )
+ this.dS.AnyTime_clickCurrent();
+ else if ( this.fBtn.hasClass('AnyTime-off-btn') )
+ {
+ if ( this.dS )
+ t = this.dS.find('.AnyTime-secs-ones');
+ else if ( this.dM )
+ t = this.dM.find('.AnyTime-mins-ones');
+ else
+ t = this.dH || this.dDoM || this.dMo;
+ if ( t )
+ t.AnyTime_clickCurrent();
+ else if ( this.dY )
+ this.yCur.triggerHandler('click');
+ else if ( key == 9 )
+ {
+ this.denyTab = false;
+ return;
+ }
+ }
+ }
+ else if ( ( key == 34 ) || ( key == 9 ) ) // PageDown or Tab
+ {
+ if ( this.fBtn.hasClass('AnyTime-mil-btn') )
+ this.yDiv.find('.AnyTime-cent-btn.AnyTime-cur-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-cent-btn') )
+ this.yDiv.find('.AnyTime-dec-btn.AnyTime-cur-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-dec-btn') )
+ this.yDiv.find('.AnyTime-yr-btn.AnyTime-cur-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-yr-btn') )
+ {
+ t = this.yDiv.find('.AnyTime-era-btn.AnyTime-cur-btn');
+ if ( t.length )
+ t.triggerHandler('click');
+ else if ( key == 9 )
+ this.dismissYDiv(event);
+ }
+ else if ( this.fBtn.hasClass('AnyTime-era-btn') )
+ {
+ if ( key == 9 )
+ this.dismissYDiv(event);
+ }
+ else if ( this.fBtn.hasClass('AnyTime-off-off-btn') )
+ {
+ if ( key == 9 )
+ this.dismissODiv(event);
+ }
+ else if ( this.fBtn.parents('.AnyTime-yrs').length )
+ {
+ t = this.dDoM || this.dMo || this.dH || this.dM || this.dS || this.dO;
+ if ( t )
+ t.AnyTime_clickCurrent();
+ else if ( key == 9 )
+ {
+ this.denyTab = false;
+ return;
+ }
+ }
+ else if ( this.fBtn.hasClass('AnyTime-mon-btn') )
+ {
+ t = this.dDoM || this.dH || this.dM || this.dS || this.dO;
+ if ( t )
+ t.AnyTime_clickCurrent();
+ else if ( key == 9 )
+ {
+ this.denyTab = false;
+ return;
+ }
+ }
+ else if ( this.fBtn.hasClass('AnyTime-dom-btn') )
+ {
+ if ( key == 9 ) // Tab
+ {
+ t = this.dH || this.dM || this.dS || this.dO;
+ if ( t )
+ t.AnyTime_clickCurrent();
+ else
+ {
+ this.denyTab = false;
+ return;
+ }
+ }
+ else // PageDown
+ {
+ t = new Date(this.time.getTime());
+ if ( event.shiftKey )
+ t.setFullYear(t.getFullYear()+1);
+ else
+ {
+ mo = t.getMonth()+1;
+ if ( t.getDate() > __daysIn[mo] )
+ t.setDate(__daysIn[mo])
+ t.setMonth(mo);
+ }
+ this.keyDateChange(t);
+ }
+ }
+ else if ( this.fBtn.hasClass('AnyTime-hr-btn') )
+ {
+ t = this.dM || this.dS || this.dO;
+ if ( t )
+ t.AnyTime_clickCurrent();
+ else if ( key == 9 )
+ {
+ this.denyTab = false;
+ return;
+ }
+ }
+ else if ( this.fBtn.hasClass('AnyTime-min-ten-btn') )
+ this.dM.find('.AnyTime-mins-ones .AnyTime-cur-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-min-one-btn') )
+ {
+ t = this.dS || this.dO;
+ if ( t )
+ t.AnyTime_clickCurrent();
+ else if ( key == 9 )
+ {
+ this.denyTab = false;
+ return;
+ }
+ }
+ else if ( this.fBtn.hasClass('AnyTime-sec-ten-btn') )
+ this.dS.find('.AnyTime-secs-ones .AnyTime-cur-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-sec-one-btn') )
+ {
+ if ( this.dO )
+ this.dO.AnyTime_clickCurrent();
+ else if ( key == 9 )
+ {
+ this.denyTab = false;
+ return;
+ }
+ }
+ else if ( this.fBtn.hasClass('AnyTime-off-btn') )
+ {
+ if ( key == 9 )
+ {
+ this.denyTab = false;
+ return;
+ }
+ }
+ }
+ else if ( key == 35 ) // END
+ {
+ if ( this.fBtn.hasClass('AnyTime-mil-btn') || this.fBtn.hasClass('AnyTime-cent-btn') ||
+ this.fBtn.hasClass('AnyTime-dec-btn') || this.fBtn.hasClass('AnyTime-yr-btn') ||
+ this.fBtn.hasClass('AnyTime-era-btn') )
+ {
+ t = this.yDiv.find('.AnyTime-ce-btn');
+ if ( ! t.length )
+ t = this.yDiv.find('.AnyTime-yr9-btn');
+ t.triggerHandler('click');
+ }
+ else if ( this.fBtn.hasClass('AnyTime-dom-btn') )
+ {
+ t = new Date(this.time.getTime());
+ t.setDate(1);
+ t.setMonth(t.getMonth()+1);
+ t.setDate(t.getDate()-1);
+ if ( event.ctrlKey )
+ t.setMonth(11);
+ this.keyDateChange(t);
+ }
+ else if ( this.dS )
+ this.dS.find('.AnyTime-sec9-btn').triggerHandler('click');
+ else if ( this.dM )
+ this.dM.find('.AnyTime-min9-btn').triggerHandler('click');
+ else if ( this.dH )
+ this.dH.find('.AnyTime-hr23-btn').triggerHandler('click');
+ else if ( this.dDoM )
+ this.dDoM.find('.AnyTime-dom-btn-filled:last').triggerHandler('click');
+ else if ( this.dMo )
+ this.dMo.find('.AnyTime-mon12-btn').triggerHandler('click');
+ else if ( this.dY )
+ this.yAhead.triggerHandler('click');
+ }
+ else if ( key == 36 ) // HOME
+ {
+ if ( this.fBtn.hasClass('AnyTime-mil-btn') || this.fBtn.hasClass('AnyTime-cent-btn') ||
+ this.fBtn.hasClass('AnyTime-dec-btn') || this.fBtn.hasClass('AnyTime-yr-btn') ||
+ this.fBtn.hasClass('AnyTime-era-btn') )
+ {
+ this.yDiv.find('.AnyTime-mil0-btn').triggerHandler('click');
+ }
+ else if ( this.fBtn.hasClass('AnyTime-dom-btn') )
+ {
+ t = new Date(this.time.getTime());
+ t.setDate(1);
+ if ( event.ctrlKey )
+ t.setMonth(0);
+ this.keyDateChange(t);
+ }
+ else if ( this.dY )
+ this.yCur.triggerHandler('click');
+ else if ( this.dMo )
+ this.dMo.find('.AnyTime-mon1-btn').triggerHandler('click');
+ else if ( this.dDoM )
+ this.dDoM.find('.AnyTime-dom-btn-filled:first').triggerHandler('click');
+ else if ( this.dH )
+ this.dH.find('.AnyTime-hr0-btn').triggerHandler('click');
+ else if ( this.dM )
+ this.dM.find('.AnyTime-min00-btn').triggerHandler('click');
+ else if ( this.dS )
+ this.dS.find('.AnyTime-sec00-btn').triggerHandler('click');
+ }
+ else if ( key == 37 ) // left arrow
+ {
+ if ( this.fBtn.hasClass('AnyTime-dom-btn') )
+ this.keyDateChange(new Date(this.time.getTime()-__oneDay));
+ else
+ this.keyBack();
+ }
+ else if ( key == 38 ) // up arrow
+ {
+ if ( this.fBtn.hasClass('AnyTime-dom-btn') )
+ this.keyDateChange(new Date(this.time.getTime()-(7*__oneDay)));
+ else
+ this.keyBack();
+ }
+ else if ( key == 39 ) // right arrow
+ {
+ if ( this.fBtn.hasClass('AnyTime-dom-btn') )
+ this.keyDateChange(new Date(this.time.getTime()+__oneDay));
+ else
+ this.keyAhead();
+ }
+ else if ( key == 40 ) // down arrow
+ {
+ if ( this.fBtn.hasClass('AnyTime-dom-btn') )
+ this.keyDateChange(new Date(this.time.getTime()+(7*__oneDay)));
+ else
+ this.keyAhead();
+ }
+ else if ( ( ( key == 86 ) || ( key == 118 ) ) && event.ctrlKey )
+ {
+ this.inp.val("").change();
+ var _this = this;
+ setTimeout( function() { _this.showPkr(null); }, 100 );
+ return;
+ }
+ else
+ this.showPkr(null);
- event.preventDefault();
-
- }, // .key()
-
- //---------------------------------------------------------------------
- // .keyAhead() is called by #key when a user presses the right or
- // down arrow. It moves to the next appropriate button.
- //---------------------------------------------------------------------
-
- keyAhead: function()
- {
- if ( this.fBtn.hasClass('AnyTime-mil9-btn') )
- this.yDiv.find('.AnyTime-cent0-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-cent9-btn') )
- this.yDiv.find('.AnyTime-dec0-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-dec9-btn') )
- this.yDiv.find('.AnyTime-yr0-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-yr9-btn') )
- this.yDiv.find('.AnyTime-bce-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-sec9-btn') )
- {}
- else if ( this.fBtn.hasClass('AnyTime-sec50-btn') )
- this.dS.find('.AnyTime-sec0-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-min9-btn') )
- {
- if ( this.dS )
- this.dS.find('.AnyTime-sec00-btn').triggerHandler('click');
- }
- else if ( this.fBtn.hasClass('AnyTime-min50-btn') )
- this.dM.find('.AnyTime-min0-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-hr23-btn') )
- {
- if ( this.dM )
- this.dM.find('.AnyTime-min00-btn').triggerHandler('click');
- else if ( this.dS )
- this.dS.find('.AnyTime-sec00-btn').triggerHandler('click');
- }
- else if ( this.fBtn.hasClass('AnyTime-hr11-btn') )
- this.dH.find('.AnyTime-hr12-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-mon12-btn') )
- {
- if ( this.dDoM )
- this.dDoM.AnyTime_clickCurrent();
- else if ( this.dH )
- this.dH.find('.AnyTime-hr0-btn').triggerHandler('click');
- else if ( this.dM )
- this.dM.find('.AnyTime-min00-btn').triggerHandler('click');
- else if ( this.dS )
- this.dS.find('.AnyTime-sec00-btn').triggerHandler('click');
- }
- else if ( this.fBtn.hasClass('AnyTime-yrs-ahead-btn') )
- {
- if ( this.dMo )
- this.dMo.find('.AnyTime-mon1-btn').triggerHandler('click');
- else if ( this.dH )
- this.dH.find('.AnyTime-hr0-btn').triggerHandler('click');
- else if ( this.dM )
- this.dM.find('.AnyTime-min00-btn').triggerHandler('click');
- else if ( this.dS )
- this.dS.find('.AnyTime-sec00-btn').triggerHandler('click');
- }
- else if ( this.fBtn.hasClass('AnyTime-yr-cur-btn') )
- this.yNext.triggerHandler('click');
- else
- this.fBtn.next().triggerHandler('click');
-
- }, // .keyAhead()
-
-
- //---------------------------------------------------------------------
- // .keyBack() is called by #key when a user presses the left or
- // up arrow. It moves to the previous appropriate button.
- //---------------------------------------------------------------------
-
- keyBack: function()
- {
- if ( this.fBtn.hasClass('AnyTime-cent0-btn') )
- this.yDiv.find('.AnyTime-mil9-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-dec0-btn') )
- this.yDiv.find('.AnyTime-cent9-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-yr0-btn') )
- this.yDiv.find('.AnyTime-dec9-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-bce-btn') )
- this.yDiv.find('.AnyTime-yr9-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-yr-cur-btn') )
- this.yPrior.triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-mon1-btn') )
- {
- if ( this.dY )
- this.yCur.triggerHandler('click');
- }
- else if ( this.fBtn.hasClass('AnyTime-hr0-btn') )
- {
- if ( this.dDoM )
- this.dDoM.AnyTime_clickCurrent();
- else if ( this.dMo )
- this.dMo.find('.AnyTime-mon12-btn').triggerHandler('click');
- else if ( this.dY )
- this.yNext.triggerHandler('click');
- }
- else if ( this.fBtn.hasClass('AnyTime-hr12-btn') )
- this.dH.find('.AnyTime-hr11-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-min00-btn') )
- {
- if ( this.dH )
- this.dH.find('.AnyTime-hr23-btn').triggerHandler('click');
- else if ( this.dDoM )
- this.dDoM.AnyTime_clickCurrent();
- else if ( this.dMo )
- this.dMo.find('.AnyTime-mon12-btn').triggerHandler('click');
- else if ( this.dY )
- this.yNext.triggerHandler('click');
- }
- else if ( this.fBtn.hasClass('AnyTime-min0-btn') )
- this.dM.find('.AnyTime-min50-btn').triggerHandler('click');
- else if ( this.fBtn.hasClass('AnyTime-sec00-btn') )
- {
- if ( this.dM )
- this.dM.find('.AnyTime-min9-btn').triggerHandler('click');
- else if ( this.dH )
- this.dH.find('.AnyTime-hr23-btn').triggerHandler('click');
- else if ( this.dDoM )
- this.dDoM.AnyTime_clickCurrent();
- else if ( this.dMo )
- this.dMo.find('.AnyTime-mon12-btn').triggerHandler('click');
- else if ( this.dY )
- this.yNext.triggerHandler('click');
- }
- else if ( this.fBtn.hasClass('AnyTime-sec0-btn') )
- this.dS.find('.AnyTime-sec50-btn').triggerHandler('click');
- else
- this.fBtn.prev().triggerHandler('click');
-
- }, // .keyBack()
-
- //---------------------------------------------------------------------
- // .keyDateChange() is called by #key when an direction key
- // (arrows/page/etc) is pressed while the Day-of-Month calendar has
- // focus. The current day is adjusted accordingly.
- //---------------------------------------------------------------------
-
- keyDateChange: function( newDate )
- {
- if ( this.fBtn.hasClass('AnyTime-dom-btn') )
- {
- this.set(newDate);
- this.upd(null);
- this.setFocus( this.dDoM.find('.AnyTime-cur-btn') );
- }
- },
-
- //---------------------------------------------------------------------
- // .makeCloak() is called by .askOffset() and .askYear() to create
- // a cloak div.
- //---------------------------------------------------------------------
+ event.preventDefault();
+
+ }, // .key()
+
+ //---------------------------------------------------------------------
+ // .keyAhead() is called by #key when a user presses the right or
+ // down arrow. It moves to the next appropriate button.
+ //---------------------------------------------------------------------
+
+ keyAhead: function()
+ {
+ if ( this.fBtn.hasClass('AnyTime-mil9-btn') )
+ this.yDiv.find('.AnyTime-cent0-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-cent9-btn') )
+ this.yDiv.find('.AnyTime-dec0-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-dec9-btn') )
+ this.yDiv.find('.AnyTime-yr0-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-yr9-btn') )
+ this.yDiv.find('.AnyTime-bce-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-sec9-btn') )
+ {}
+ else if ( this.fBtn.hasClass('AnyTime-sec50-btn') )
+ this.dS.find('.AnyTime-sec0-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-min9-btn') )
+ {
+ if ( this.dS )
+ this.dS.find('.AnyTime-sec00-btn').triggerHandler('click');
+ }
+ else if ( this.fBtn.hasClass('AnyTime-min50-btn') )
+ this.dM.find('.AnyTime-min0-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-hr23-btn') )
+ {
+ if ( this.dM )
+ this.dM.find('.AnyTime-min00-btn').triggerHandler('click');
+ else if ( this.dS )
+ this.dS.find('.AnyTime-sec00-btn').triggerHandler('click');
+ }
+ else if ( this.fBtn.hasClass('AnyTime-hr11-btn') )
+ this.dH.find('.AnyTime-hr12-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-mon12-btn') )
+ {
+ if ( this.dDoM )
+ this.dDoM.AnyTime_clickCurrent();
+ else if ( this.dH )
+ this.dH.find('.AnyTime-hr0-btn').triggerHandler('click');
+ else if ( this.dM )
+ this.dM.find('.AnyTime-min00-btn').triggerHandler('click');
+ else if ( this.dS )
+ this.dS.find('.AnyTime-sec00-btn').triggerHandler('click');
+ }
+ else if ( this.fBtn.hasClass('AnyTime-yrs-ahead-btn') )
+ {
+ if ( this.dMo )
+ this.dMo.find('.AnyTime-mon1-btn').triggerHandler('click');
+ else if ( this.dH )
+ this.dH.find('.AnyTime-hr0-btn').triggerHandler('click');
+ else if ( this.dM )
+ this.dM.find('.AnyTime-min00-btn').triggerHandler('click');
+ else if ( this.dS )
+ this.dS.find('.AnyTime-sec00-btn').triggerHandler('click');
+ }
+ else if ( this.fBtn.hasClass('AnyTime-yr-cur-btn') )
+ this.yNext.triggerHandler('click');
+ else
+ this.fBtn.next().triggerHandler('click');
+
+ }, // .keyAhead()
+
+
+ //---------------------------------------------------------------------
+ // .keyBack() is called by #key when a user presses the left or
+ // up arrow. It moves to the previous appropriate button.
+ //---------------------------------------------------------------------
+
+ keyBack: function()
+ {
+ if ( this.fBtn.hasClass('AnyTime-cent0-btn') )
+ this.yDiv.find('.AnyTime-mil9-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-dec0-btn') )
+ this.yDiv.find('.AnyTime-cent9-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-yr0-btn') )
+ this.yDiv.find('.AnyTime-dec9-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-bce-btn') )
+ this.yDiv.find('.AnyTime-yr9-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-yr-cur-btn') )
+ this.yPrior.triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-mon1-btn') )
+ {
+ if ( this.dY )
+ this.yCur.triggerHandler('click');
+ }
+ else if ( this.fBtn.hasClass('AnyTime-hr0-btn') )
+ {
+ if ( this.dDoM )
+ this.dDoM.AnyTime_clickCurrent();
+ else if ( this.dMo )
+ this.dMo.find('.AnyTime-mon12-btn').triggerHandler('click');
+ else if ( this.dY )
+ this.yNext.triggerHandler('click');
+ }
+ else if ( this.fBtn.hasClass('AnyTime-hr12-btn') )
+ this.dH.find('.AnyTime-hr11-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-min00-btn') )
+ {
+ if ( this.dH )
+ this.dH.find('.AnyTime-hr23-btn').triggerHandler('click');
+ else if ( this.dDoM )
+ this.dDoM.AnyTime_clickCurrent();
+ else if ( this.dMo )
+ this.dMo.find('.AnyTime-mon12-btn').triggerHandler('click');
+ else if ( this.dY )
+ this.yNext.triggerHandler('click');
+ }
+ else if ( this.fBtn.hasClass('AnyTime-min0-btn') )
+ this.dM.find('.AnyTime-min50-btn').triggerHandler('click');
+ else if ( this.fBtn.hasClass('AnyTime-sec00-btn') )
+ {
+ if ( this.dM )
+ this.dM.find('.AnyTime-min9-btn').triggerHandler('click');
+ else if ( this.dH )
+ this.dH.find('.AnyTime-hr23-btn').triggerHandler('click');
+ else if ( this.dDoM )
+ this.dDoM.AnyTime_clickCurrent();
+ else if ( this.dMo )
+ this.dMo.find('.AnyTime-mon12-btn').triggerHandler('click');
+ else if ( this.dY )
+ this.yNext.triggerHandler('click');
+ }
+ else if ( this.fBtn.hasClass('AnyTime-sec0-btn') )
+ this.dS.find('.AnyTime-sec50-btn').triggerHandler('click');
+ else
+ this.fBtn.prev().triggerHandler('click');
+
+ }, // .keyBack()
+
+ //---------------------------------------------------------------------
+ // .keyDateChange() is called by #key when an direction key
+ // (arrows/page/etc) is pressed while the Day-of-Month calendar has
+ // focus. The current day is adjusted accordingly.
+ //---------------------------------------------------------------------
+
+ keyDateChange: function( newDate )
+ {
+ if ( this.fBtn.hasClass('AnyTime-dom-btn') )
+ {
+ this.set(newDate);
+ this.upd(null);
+ this.setFocus( this.dDoM.find('.AnyTime-cur-btn') );
+ }
+ },
+
+ //---------------------------------------------------------------------
+ // .makeCloak() is called by .askOffset() and .askYear() to create
+ // a cloak div.
+ //---------------------------------------------------------------------
- makeCloak: function()
- {
- if ( ! this.cloak )
- {
- this.cloak = $('<div class="AnyTime-cloak" style="position:absolute" />');
- this.div.append( this.cloak );
- this.cloak.click(
- function(e)
- {
- if ( _this.oDiv && _this.oDiv.is(":visible") )
- _this.dismissODiv(e);
- else
- _this.dismissYDiv(e);
- });
- }
- else
- this.cloak.show();
- },
-
- //---------------------------------------------------------------------
- // .newHour() is called when a user clicks an hour value.
- // It changes the date and updates the text field.
- //---------------------------------------------------------------------
-
- newHour: function( event )
- {
- var h;
- var t;
- var elem = $(event.target);
- if ( elem.hasClass("AnyTime-out-btn") )
- return;
- if ( ! this.twelveHr )
- h = Number(elem.text());
- else
- {
- var str = elem.text();
- t = str.indexOf('a');
- if ( t < 0 )
- {
- t = Number(str.substr(0,str.indexOf('p')));
- h = ( (t==12) ? 12 : (t+12) );
- }
- else
- {
- t = Number(str.substr(0,t));
- h = ( (t==12) ? 0 : t );
- }
- }
- t = new Date(this.time.getTime());
- t.setHours(h);
- this.set(t);
- this.upd(elem);
-
- }, // .newHour()
-
- //---------------------------------------------------------------------
- // .newOffset() is called when a user clicks the UTC offset (timezone)
- // (or +/- button) to shift the year. It changes the date and updates
- // the text field.
- //---------------------------------------------------------------------
-
- newOffset: function( event )
- {
- if ( event.target == this.oSel[0] )
- this.askOffset(event);
- else
- {
- this.upd(this.oCur);
- }
- },
-
- //---------------------------------------------------------------------
- // .newOPos() is called internally whenever a user clicks an offset
- // selection value. It changes the date and updates the text field.
- //---------------------------------------------------------------------
-
- newOPos: function( event )
- {
- var elem = $(event.target);
+ makeCloak: function()
+ {
+ if ( ! this.cloak )
+ {
+ this.cloak = $('<div class="AnyTime-cloak" style="position:absolute" />');
+ this.div.append( this.cloak );
+ this.cloak.click(
+ function(e)
+ {
+ if ( _this.oDiv && _this.oDiv.is(":visible") )
+ _this.dismissODiv(e);
+ else
+ _this.dismissYDiv(e);
+ });
+ }
+ else
+ this.cloak.show();
+ },
+
+ //---------------------------------------------------------------------
+ // .newHour() is called when a user clicks an hour value.
+ // It changes the date and updates the text field.
+ //---------------------------------------------------------------------
+
+ newHour: function( event )
+ {
+ var h;
+ var t;
+ var elem = $(event.target);
+ if ( elem.hasClass("AnyTime-out-btn") )
+ return;
+ if ( ! this.twelveHr )
+ h = Number(elem.text());
+ else
+ {
+ var str = elem.text();
+ t = str.indexOf('a');
+ if ( t < 0 )
+ {
+ t = Number(str.substr(0,str.indexOf('p')));
+ h = ( (t==12) ? 12 : (t+12) );
+ }
+ else
+ {
+ t = Number(str.substr(0,t));
+ h = ( (t==12) ? 0 : t );
+ }
+ }
+ t = new Date(this.time.getTime());
+ t.setHours(h);
+ this.set(t);
+ this.upd(elem);
+
+ }, // .newHour()
+
+ //---------------------------------------------------------------------
+ // .newOffset() is called when a user clicks the UTC offset (timezone)
+ // (or +/- button) to shift the year. It changes the date and updates
+ // the text field.
+ //---------------------------------------------------------------------
+
+ newOffset: function( event )
+ {
+ if ( event.target == this.oSel[0] )
+ this.askOffset(event);
+ else
+ {
+ this.upd(this.oCur);
+ }
+ },
+
+ //---------------------------------------------------------------------
+ // .newOPos() is called internally whenever a user clicks an offset
+ // selection value. It changes the date and updates the text field.
+ //---------------------------------------------------------------------
+
+ newOPos: function( event )
+ {
+ var elem = $(event.target);
this.offMin = elem[0].AnyTime_offMin;
this.offSI = elem[0].AnyTime_offSI;
- var t = new Date(this.time.getTime());
- this.set(t);
- this.updODiv(elem);
-
- }, // .newOPos()
-
- //---------------------------------------------------------------------
- // .newYear() is called when a user clicks a year (or one of the
- // "arrows") to shift the year. It changes the date and updates the
- // text field.
- //---------------------------------------------------------------------
-
- newYear: function( event )
- {
- var elem = $(event.target);
- if ( elem.hasClass("AnyTime-out-btn") )
- return;
- var txt = elem.text();
- if ( ( txt == '<' ) || ( txt == '<' ) )
- this.askYear(event);
- else if ( ( txt == '>' ) || ( txt == '>' ) )
- this.askYear(event);
- else
- {
- var t = new Date(this.time.getTime());
- t.setFullYear(Number(txt));
- this.set(t);
- this.upd(this.yCur);
- }
- },
-
- //---------------------------------------------------------------------
- // .newYPos() is called internally whenever a user clicks a year
- // selection value. It changes the date and updates the text field.
- //---------------------------------------------------------------------
-
- newYPos: function( event )
- {
- var elem = $(event.target);
- if ( elem.hasClass("AnyTime-out-btn") )
- return;
-
- var era = 1;
- var year = this.time.getFullYear();
- if ( year < 0 )
- {
- era = (-1);
- year = 0 - year;
- }
- year = AnyTime.pad( year, 4 );
- if ( elem.hasClass('AnyTime-mil-btn') )
- year = elem.html() + year.substring(1,4);
- else if ( elem.hasClass('AnyTime-cent-btn') )
- year = year.substring(0,1) + elem.html() + year.substring(2,4);
- else if ( elem.hasClass('AnyTime-dec-btn') )
- year = year.substring(0,2) + elem.html() + year.substring(3,4);
- else
- year = year.substring(0,3) + elem.html();
- if ( year == '0000' )
- year = 1;
- var t = new Date(this.time.getTime());
- t.setFullYear( era * year );
- this.set(t);
- this.updYDiv(elem);
-
- }, // .newYPos()
-
- //---------------------------------------------------------------------
- // .onReady() initializes the picker after the page has loaded and,
- // if IE6, after the iframe has been created.
- //---------------------------------------------------------------------
-
- onReady: function()
- {
- this.lostFocus = true;
- if ( ! this.pop )
- this.upd(null);
- else
- {
- if ( this.div.parent() != document.body )
- this.div.appendTo( document.body );
- }
- },
-
- //---------------------------------------------------------------------
- // .pos() positions the picker, such as when it is displayed or
- // when the window is resized.
- //---------------------------------------------------------------------
-
- pos: function(event) // note: event is ignored but this is a handler
- {
- if ( this.pop )
- {
- var off = this.inp.offset();
- var bodyWidth = $(document.body).outerWidth(true);
- var pickerWidth = this.div.outerWidth(true);
- var left = off.left;
- if ( left + pickerWidth > bodyWidth - 20 )
- left = bodyWidth - ( pickerWidth + 20 );
- var top = off.top - this.div.outerHeight(true);
- if ( top < 0 )
- top = off.top + this.inp.outerHeight(true);
- this.div.css( { top: String(top)+'px', left: String(left<0?0:left)+'px' } );
- }
-
- var wOff = this.div.offset();
+ var t = new Date(this.time.getTime());
+ this.set(t);
+ this.updODiv(elem);
+
+ }, // .newOPos()
+
+ //---------------------------------------------------------------------
+ // .newYear() is called when a user clicks a year (or one of the
+ // "arrows") to shift the year. It changes the date and updates the
+ // text field.
+ //---------------------------------------------------------------------
+
+ newYear: function( event )
+ {
+ var elem = $(event.target);
+ if ( elem.hasClass("AnyTime-out-btn") )
+ return;
+ var txt = elem.text();
+ if ( ( txt == '<' ) || ( txt == '<' ) )
+ this.askYear(event);
+ else if ( ( txt == '>' ) || ( txt == '>' ) )
+ this.askYear(event);
+ else
+ {
+ var t = new Date(this.time.getTime());
+ t.setFullYear(Number(txt));
+ this.set(t);
+ this.upd(this.yCur);
+ }
+ },
+
+ //---------------------------------------------------------------------
+ // .newYPos() is called internally whenever a user clicks a year
+ // selection value. It changes the date and updates the text field.
+ //---------------------------------------------------------------------
+
+ newYPos: function( event )
+ {
+ var elem = $(event.target);
+ if ( elem.hasClass("AnyTime-out-btn") )
+ return;
+
+ var era = 1;
+ var year = this.time.getFullYear();
+ if ( year < 0 )
+ {
+ era = (-1);
+ year = 0 - year;
+ }
+ year = AnyTime.pad( year, 4 );
+ if ( elem.hasClass('AnyTime-mil-btn') )
+ year = elem.html() + year.substring(1,4);
+ else if ( elem.hasClass('AnyTime-cent-btn') )
+ year = year.substring(0,1) + elem.html() + year.substring(2,4);
+ else if ( elem.hasClass('AnyTime-dec-btn') )
+ year = year.substring(0,2) + elem.html() + year.substring(3,4);
+ else
+ year = year.substring(0,3) + elem.html();
+ if ( year == '0000' )
+ year = 1;
+ var t = new Date(this.time.getTime());
+ t.setFullYear( era * year );
+ this.set(t);
+ this.updYDiv(elem);
+
+ }, // .newYPos()
+
+ //---------------------------------------------------------------------
+ // .onReady() initializes the picker after the page has loaded and,
+ // if IE6, after the iframe has been created.
+ //---------------------------------------------------------------------
+
+ onReady: function()
+ {
+ this.lostFocus = true;
+ if ( ! this.pop )
+ this.upd(null);
+ else
+ {
+ if ( this.div.parent() != document.body )
+ this.div.appendTo( document.body );
+ }
+ },
+
+ //---------------------------------------------------------------------
+ // .pos() positions the picker, such as when it is displayed or
+ // when the window is resized.
+ //---------------------------------------------------------------------
+
+ pos: function(event) // note: event is ignored but this is a handler
+ {
+ if ( this.pop )
+ {
+ var off = this.inp.offset();
+ var bodyWidth = $(document.body).outerWidth(true);
+ var pickerWidth = this.div.outerWidth(true);
+ var left = off.left;
+ if ( left + pickerWidth > bodyWidth - 20 )
+ left = bodyWidth - ( pickerWidth + 20 );
+ var top = off.top - this.div.outerHeight(true);
+ if ( top < 0 )
+ top = off.top + this.inp.outerHeight(true);
+ this.div.css( { top: String(top)+'px', left: String(left<0?0:left)+'px' } );
+ }
+
+ var wOff = this.div.offset();
- if ( this.oDiv && this.oDiv.is(":visible") )
- {
- var oOff = this.oLab.offset();
- if ( this.div.css('position') == 'absolute' )
- {
- oOff.top -= wOff.top;
- oOff.left = oOff.left - wOff.left;
- wOff = { top: 0, left: 0 };
- }
- var oW = this.oDiv.AnyTime_width(true);
- var wW = this.div.AnyTime_width(true);
- if ( oOff.left + oW > wOff.left + wW )
- {
- oOff.left = (wOff.left+wW)-oW;
- if ( oOff.left < 2 )
- oOff.left = 2;
- }
+ if ( this.oDiv && this.oDiv.is(":visible") )
+ {
+ var oOff = this.oLab.offset();
+ if ( this.div.css('position') == 'absolute' )
+ {
+ oOff.top -= wOff.top;
+ oOff.left = oOff.left - wOff.left;
+ wOff = { top: 0, left: 0 };
+ }
+ var oW = this.oDiv.AnyTime_width(true);
+ var wW = this.div.AnyTime_width(true);
+ if ( oOff.left + oW > wOff.left + wW )
+ {
+ oOff.left = (wOff.left+wW)-oW;
+ if ( oOff.left < 2 )
+ oOff.left = 2;
+ }
- var oH = this.oDiv.AnyTime_height(true);
- var wH = this.div.AnyTime_height(true);
- oOff.top += this.oLab.AnyTime_height(true);
- if ( oOff.top + oH > wOff.top + wH )
- oOff.top = oOff.top - oH;
- if ( oOff.top < wOff.top )
- oOff.top = wOff.top;
+ var oH = this.oDiv.AnyTime_height(true);
+ var wH = this.div.AnyTime_height(true);
+ oOff.top += this.oLab.AnyTime_height(true);
+ if ( oOff.top + oH > wOff.top + wH )
+ oOff.top = oOff.top - oH;
+ if ( oOff.top < wOff.top )
+ oOff.top = wOff.top;
- this.oDiv.css( { top: oOff.top+'px', left: oOff.left+'px' } ) ;
- }
+ this.oDiv.css( { top: oOff.top+'px', left: oOff.left+'px' } ) ;
+ }
- else if ( this.yDiv && this.yDiv.is(":visible") )
- {
- var yOff = this.yLab.offset();
- if ( this.div.css('position') == 'absolute' )
- {
- yOff.top -= wOff.top;
- yOff.left = yOff.left - wOff.left;
- wOff = { top: 0, left: 0 };
- }
- yOff.left += ( (this.yLab.outerWidth(true)-this.yDiv.outerWidth(true)) / 2 );
- this.yDiv.css( { top: yOff.top+'px', left: yOff.left+'px' } ) ;
- }
+ else if ( this.yDiv && this.yDiv.is(":visible") )
+ {
+ var yOff = this.yLab.offset();
+ if ( this.div.css('position') == 'absolute' )
+ {
+ yOff.top -= wOff.top;
+ yOff.left = yOff.left - wOff.left;
+ wOff = { top: 0, left: 0 };
+ }
+ yOff.left += ( (this.yLab.outerWidth(true)-this.yDiv.outerWidth(true)) / 2 );
+ this.yDiv.css( { top: yOff.top+'px', left: yOff.left+'px' } ) ;
+ }
- if ( this.cloak )
- this.cloak.css( {
- top: wOff.top+'px',
- left: wOff.left+'px',
- height: String(this.div.outerHeight(true)-2)+'px',
- width: String(this.div.outerWidth(!$.browser.safari)-2)+'px'
- } );
-
- }, // .pos()
-
- //---------------------------------------------------------------------
- // .set() changes the current time. It returns true if the new
- // time is within the allowed range (if any).
- //---------------------------------------------------------------------
-
- set: function(newTime)
- {
- var t = newTime.getTime();
- if ( this.earliest && ( t < this.earliest ) )
- this.time = new Date(this.earliest);
- else if ( this.latest && ( t > this.latest ) )
- this.time = new Date(this.latest);
- else
- this.time = newTime;
- },
-
- //---------------------------------------------------------------------
- // .showPkr() displays the picker and sets the focus psuedo-
- // element. The current value in the input field is used to initialize
- // the picker.
- //---------------------------------------------------------------------
-
- showPkr: function(event)
- {
- try
- {
- this.time = this.conv.parse(this.inp.val());
- this.offMin = this.conv.getUtcParseOffsetCaptured();
- this.offSI = this.conv.getUtcParseOffsetSubIndex();
- }
- catch ( e )
- {
- this.time = new Date();
- }
- this.set(this.time);
- this.upd(null);
-
- fBtn = null;
- var cb = '.AnyTime-cur-btn:first';
- if ( this.dDoM )
- fBtn = this.dDoM.find(cb);
- else if ( this.yCur )
- fBtn = this.yCur;
- else if ( this.dMo )
- fBtn = this.dMo.find(cb);
- else if ( this.dH )
- fBtn = this.dH.find(cb);
- else if ( this.dM )
- fBtn = this.dM.find(cb);
- else if ( this.dS )
- fBtn = this.dS.find(cb);
-
- this.setFocus(fBtn);
- this.pos(event);
-
- // IE6 doesn't float popups over <select> elements unless an
- // <iframe> is inserted between them! So after the picker is
- // made visible, move the <iframe> behind it.
-
- if ( this.pop && __iframe )
- setTimeout(
- function()
- {
- var pos = _this.div.offset();
- __iframe.css( {
- height: String(_this.div.outerHeight(true)) + 'px',
- left: String(pos.left) + 'px',
- position: 'absolute',
- top: String(pos.top) + 'px',
- width: String(_this.div.outerWidth(true)) + 'px'
- } );
- __iframe.show();
- }, 300 );
-
- }, // .showPkr()
-
- //---------------------------------------------------------------------
- // .upd() updates the picker's appearance. It is called after
- // most events to make the picker reflect the currently-selected
- // values. fBtn is the psuedo-button to be given focus.
- //---------------------------------------------------------------------
-
- upd: function(fBtn)
- {
- var cmpLo = new Date(this.time.getTime());
- cmpLo.setMonth(0,1);
- cmpLo.setHours(0,0,0,0);
- var cmpHi = new Date(this.time.getTime());
- cmpHi.setMonth(11,31);
- cmpHi.setHours(23,59,59,999);
+ if ( this.cloak )
+ this.cloak.css( {
+ top: wOff.top+'px',
+ left: wOff.left+'px',
+ height: String(this.div.outerHeight(true)-2)+'px',
+ width: String(this.div.outerWidth(!$.browser.safari)-2)+'px'
+ } );
+
+ }, // .pos()
+
+ //---------------------------------------------------------------------
+ // .set() changes the current time. It returns true if the new
+ // time is within the allowed range (if any).
+ //---------------------------------------------------------------------
+
+ set: function(newTime)
+ {
+ var t = newTime.getTime();
+ if ( this.earliest && ( t < this.earliest ) )
+ this.time = new Date(this.earliest);
+ else if ( this.latest && ( t > this.latest ) )
+ this.time = new Date(this.latest);
+ else
+ this.time = newTime;
+ },
+
+ //---------------------------------------------------------------------
+ // .showPkr() displays the picker and sets the focus psuedo-
+ // element. The current value in the input field is used to initialize
+ // the picker.
+ //---------------------------------------------------------------------
+
+ showPkr: function(event)
+ {
+ try
+ {
+ this.time = this.conv.parse(this.inp.val());
+ this.offMin = this.conv.getUtcParseOffsetCaptured();
+ this.offSI = this.conv.getUtcParseOffsetSubIndex();
+ }
+ catch ( e )
+ {
+ this.time = new Date();
+ }
+ this.set(this.time);
+ this.upd(null);
+
+ fBtn = null;
+ var cb = '.AnyTime-cur-btn:first';
+ if ( this.dDoM )
+ fBtn = this.dDoM.find(cb);
+ else if ( this.yCur )
+ fBtn = this.yCur;
+ else if ( this.dMo )
+ fBtn = this.dMo.find(cb);
+ else if ( this.dH )
+ fBtn = this.dH.find(cb);
+ else if ( this.dM )
+ fBtn = this.dM.find(cb);
+ else if ( this.dS )
+ fBtn = this.dS.find(cb);
+
+ this.setFocus(fBtn);
+ this.pos(event);
+
+ // IE6 doesn't float popups over <select> elements unless an
+ // <iframe> is inserted between them! So after the picker is
+ // made visible, move the <iframe> behind it.
+
+ if ( this.pop && __iframe )
+ setTimeout(
+ function()
+ {
+ var pos = _this.div.offset();
+ __iframe.css( {
+ height: String(_this.div.outerHeight(true)) + 'px',
+ left: String(pos.left) + 'px',
+ position: 'absolute',
+ top: String(pos.top) + 'px',
+ width: String(_this.div.outerWidth(true)) + 'px'
+ } );
+ __iframe.show();
+ }, 300 );
+
+ }, // .showPkr()
+
+ //---------------------------------------------------------------------
+ // .upd() updates the picker's appearance. It is called after
+ // most events to make the picker reflect the currently-selected
+ // values. fBtn is the psuedo-button to be given focus.
+ //---------------------------------------------------------------------
+
+ upd: function(fBtn)
+ {
+ var cmpLo = new Date(this.time.getTime());
+ cmpLo.setMonth(0,1);
+ cmpLo.setHours(0,0,0,0);
+ var cmpHi = new Date(this.time.getTime());
+ cmpHi.setMonth(11,31);
+ cmpHi.setHours(23,59,59,999);
- // Update year.
-
- var current = this.time.getFullYear();
- if ( this.earliest && this.yPast )
- {
- cmpHi.setYear(current-2);
- if ( cmpHi.getTime() < this.earliest )
- this.yPast.addClass('AnyTime-out-btn ui-state-disabled');
- else
- this.yPast.removeClass('AnyTime-out-btn ui-state-disabled');
- }
- if ( this.yPrior )
- {
- this.yPrior.text(AnyTime.pad((current==1)?(-1):(current-1),4));
- if ( this.earliest )
- {
- cmpHi.setYear(current-1);
- if ( cmpHi.getTime() < this.earliest )
- this.yPrior.addClass('AnyTime-out-btn ui-state-disabled');
- else
- this.yPrior.removeClass('AnyTime-out-btn ui-state-disabled');
- }
- }
- if ( this.yCur )
- this.yCur.text(AnyTime.pad(current,4));
- if ( this.yNext )
- {
- this.yNext.text(AnyTime.pad((current==-1)?1:(current+1),4));
- if ( this.latest )
- {
- cmpLo.setYear(current+1);
- if ( cmpLo.getTime() > this.latest )
- this.yNext.addClass('AnyTime-out-btn ui-state-disabled');
- else
- this.yNext.removeClass('AnyTime-out-btn ui-state-disabled');
- }
- }
- if ( this.latest && this.yAhead )
- {
- cmpLo.setYear(current+2);
- if ( cmpLo.getTime() > this.latest )
- this.yAhead.addClass('AnyTime-out-btn ui-state-disabled');
- else
- this.yAhead.removeClass('AnyTime-out-btn ui-state-disabled');
- }
-
- // Update month.
-
- cmpLo.setFullYear( this.time.getFullYear() );
- cmpHi.setFullYear( this.time.getFullYear() );
- var i = 0;
- current = this.time.getMonth();
- $('#'+this.id+' .AnyTime-mon-btn').each(
- function()
- {
- cmpLo.setMonth(i);
- cmpHi.setDate(1);
- cmpHi.setMonth(i+1);
- cmpHi.setDate(0);
- $(this).AnyTime_current( i == current,
- ((!_this.earliest)||(cmpHi.getTime()>=_this.earliest)) &&
- ((!_this.latest)||(cmpLo.getTime()<=_this.latest)) );
- i++;
- } );
-
- // Update days.
-
- cmpLo.setMonth( this.time.getMonth() );
- cmpHi.setMonth( this.time.getMonth(), 1 );
- current = this.time.getDate();
- var currentMonth = this.time.getMonth();
- var dow1 = cmpLo.getDay();
- if ( this.fDOW > dow1 )
- dow1 += 7;
- var wom = 0, dow=0;
- $('#'+this.id+' .AnyTime-wk').each(
- function()
- {
- dow = _this.fDOW;
- $(this).children().each(
- function()
- {
- if ( dow - _this.fDOW < 7 )
- {
- var td = $(this);
- if ( ((wom==0)&&(dow<dow1)) || (cmpLo.getMonth()!=currentMonth) )
- {
- td.html(' ');
- td.removeClass('AnyTime-dom-btn-filled AnyTime-cur-btn ui-state-default ui-state-highlight');
- td.addClass('AnyTime-dom-btn-empty');
- if ( wom ) // not first week
- {
- if ( ( cmpLo.getDate() == 1 ) && ( dow != 0 ) )
- td.addClass('AnyTime-dom-btn-empty-after-filled');
- else
- td.removeClass('AnyTime-dom-btn-empty-after-filled');
- if ( cmpLo.getDate() <= 7 )
- td.addClass('AnyTime-dom-btn-empty-below-filled');
- else
- td.removeClass('AnyTime-dom-btn-empty-below-filled');
- cmpLo.setDate(cmpLo.getDate()+1);
- cmpHi.setDate(cmpHi.getDate()+1);
- }
- else // first week
- {
- td.addClass('AnyTime-dom-btn-empty-above-filled');
- if ( dow == dow1 - 1 )
- td.addClass('AnyTime-dom-btn-empty-before-filled');
- else
- td.removeClass('AnyTime-dom-btn-empty-before-filled');
- }
- td.addClass('ui-state-default ui-state-disabled');
- }
- else
- {
- i = cmpLo.getDate();
- td.text(i);
- td.removeClass('AnyTime-dom-btn-empty AnyTime-dom-btn-empty-above-filled AnyTime-dom-btn-empty-before-filled '+
- 'AnyTime-dom-btn-empty-after-filled AnyTime-dom-btn-empty-below-filled ' +
- 'ui-state-default ui-state-disabled');
- td.addClass('AnyTime-dom-btn-filled ui-state-default');
- td.AnyTime_current( i == current,
- ((!_this.earliest)||(cmpHi.getTime()>=_this.earliest)) &&
- ((!_this.latest)||(cmpLo.getTime()<=_this.latest)) );
- cmpLo.setDate(i+1);
- cmpHi.setDate(i+1);
- }
- }
- dow++;
- } );
- wom++;
- } );
+ // Update year.
+
+ var current = this.time.getFullYear();
+ if ( this.earliest && this.yPast )
+ {
+ cmpHi.setYear(current-2);
+ if ( cmpHi.getTime() < this.earliest )
+ this.yPast.addClass('AnyTime-out-btn ui-state-disabled');
+ else
+ this.yPast.removeClass('AnyTime-out-btn ui-state-disabled');
+ }
+ if ( this.yPrior )
+ {
+ this.yPrior.text(AnyTime.pad((current==1)?(-1):(current-1),4));
+ if ( this.earliest )
+ {
+ cmpHi.setYear(current-1);
+ if ( cmpHi.getTime() < this.earliest )
+ this.yPrior.addClass('AnyTime-out-btn ui-state-disabled');
+ else
+ this.yPrior.removeClass('AnyTime-out-btn ui-state-disabled');
+ }
+ }
+ if ( this.yCur )
+ this.yCur.text(AnyTime.pad(current,4));
+ if ( this.yNext )
+ {
+ this.yNext.text(AnyTime.pad((current==-1)?1:(current+1),4));
+ if ( this.latest )
+ {
+ cmpLo.setYear(current+1);
+ if ( cmpLo.getTime() > this.latest )
+ this.yNext.addClass('AnyTime-out-btn ui-state-disabled');
+ else
+ this.yNext.removeClass('AnyTime-out-btn ui-state-disabled');
+ }
+ }
+ if ( this.latest && this.yAhead )
+ {
+ cmpLo.setYear(current+2);
+ if ( cmpLo.getTime() > this.latest )
+ this.yAhead.addClass('AnyTime-out-btn ui-state-disabled');
+ else
+ this.yAhead.removeClass('AnyTime-out-btn ui-state-disabled');
+ }
+
+ // Update month.
+
+ cmpLo.setFullYear( this.time.getFullYear() );
+ cmpHi.setFullYear( this.time.getFullYear() );
+ var i = 0;
+ current = this.time.getMonth();
+ $('#'+this.id+' .AnyTime-mon-btn').each(
+ function()
+ {
+ cmpLo.setMonth(i);
+ cmpHi.setDate(1);
+ cmpHi.setMonth(i+1);
+ cmpHi.setDate(0);
+ $(this).AnyTime_current( i == current,
+ ((!_this.earliest)||(cmpHi.getTime()>=_this.earliest)) &&
+ ((!_this.latest)||(cmpLo.getTime()<=_this.latest)) );
+ i++;
+ } );
+
+ // Update days.
+
+ cmpLo.setFullYear( this.time.getFullYear() );
+ cmpHi.setFullYear( this.time.getFullYear() );
+ cmpLo.setMonth( this.time.getMonth() );
+ cmpHi.setMonth( this.time.getMonth(), 1 );
+ current = this.time.getDate();
+ var currentMonth = this.time.getMonth();
+ var dow1 = cmpLo.getDay();
+ if ( this.fDOW > dow1 )
+ dow1 += 7;
+ var wom = 0, dow=0;
+ $('#'+this.id+' .AnyTime-wk').each(
+ function()
+ {
+ dow = _this.fDOW;
+ $(this).children().each(
+ function()
+ {
+ if ( dow - _this.fDOW < 7 )
+ {
+ var td = $(this);
+ if ( ((wom==0)&&(dow<dow1)) || (cmpLo.getMonth()!=currentMonth) )
+ {
+ td.html(' ');
+ td.removeClass('AnyTime-dom-btn-filled AnyTime-cur-btn ui-state-default ui-state-highlight');
+ td.addClass('AnyTime-dom-btn-empty');
+ if ( wom ) // not first week
+ {
+ if ( ( cmpLo.getDate() == 1 ) && ( dow != 0 ) )
+ td.addClass('AnyTime-dom-btn-empty-after-filled');
+ else
+ td.removeClass('AnyTime-dom-btn-empty-after-filled');
+ if ( cmpLo.getDate() <= 7 )
+ td.addClass('AnyTime-dom-btn-empty-below-filled');
+ else
+ td.removeClass('AnyTime-dom-btn-empty-below-filled');
+ cmpLo.setDate(cmpLo.getDate()+1);
+ cmpHi.setDate(cmpHi.getDate()+1);
+ }
+ else // first week
+ {
+ td.addClass('AnyTime-dom-btn-empty-above-filled');
+ if ( dow == dow1 - 1 )
+ td.addClass('AnyTime-dom-btn-empty-before-filled');
+ else
+ td.removeClass('AnyTime-dom-btn-empty-before-filled');
+ }
+ td.addClass('ui-state-default ui-state-disabled');
+ }
+ else
+ {
+ i = cmpLo.getDate();
+ td.text(i);
+ td.removeClass('AnyTime-dom-btn-empty AnyTime-dom-btn-empty-above-filled AnyTime-dom-btn-empty-before-filled '+
+ 'AnyTime-dom-btn-empty-after-filled AnyTime-dom-btn-empty-below-filled ' +
+ 'ui-state-default ui-state-disabled');
+ td.addClass('AnyTime-dom-btn-filled ui-state-default');
+ td.AnyTime_current( i == current,
+ ((!_this.earliest)||(cmpHi.getTime()>=_this.earliest)) &&
+ ((!_this.latest)||(cmpLo.getTime()<=_this.latest)) );
+ cmpLo.setDate(i+1);
+ cmpHi.setDate(i+1);
+ }
+ }
+ dow++;
+ } );
+ wom++;
+ } );
- // Update hour.
-
- cmpLo.setMonth( this.time.getMonth(), this.time.getDate() );
- cmpHi.setMonth( this.time.getMonth(), this.time.getDate() );
- var not12 = ! this.twelveHr;
+ // Update hour.
+
+ cmpLo.setFullYear( this.time.getFullYear() );
+ cmpHi.setFullYear( this.time.getFullYear() );
+ cmpLo.setMonth( this.time.getMonth(), this.time.getDate() );
+ cmpHi.setMonth( this.time.getMonth(), this.time.getDate() );
+ var not12 = ! this.twelveHr;
var hr = this.time.getHours();
- $('#'+this.id+' .AnyTime-hr-btn').each(
- function()
- {
- var html = this.innerHTML;
- var i;
- if ( not12 )
- i = Number(html);
- else
- {
- i = Number(html.substring(0,html.length-2) );
- if ( html.charAt(html.length-2) == 'a' )
- {
- if ( i == 12 )
- i = 0;
- }
- else if ( i < 12 )
- i += 12;
- }
+ $('#'+this.id+' .AnyTime-hr-btn').each(
+ function()
+ {
+ var html = this.innerHTML;
+ var i;
+ if ( not12 )
+ i = Number(html);
+ else
+ {
+ i = Number(html.substring(0,html.length-2) );
+ if ( html.charAt(html.length-2) == 'a' )
+ {
+ if ( i == 12 )
+ i = 0;
+ }
+ else if ( i < 12 )
+ i += 12;
+ }
cmpLo.setHours(i);
cmpHi.setHours(i);
$(this).AnyTime_current( hr == i,
- ((!_this.earliest)||(cmpHi.getTime()>=_this.earliest)) &&
- ((!_this.latest)||(cmpLo.getTime()<=_this.latest)) );
+ ((!_this.earliest)||(cmpHi.getTime()>=_this.earliest)) &&
+ ((!_this.latest)||(cmpLo.getTime()<=_this.latest)) );
if ( i < 23 )
- cmpLo.setHours( cmpLo.getHours()+1 );
- } );
-
- // Update minute.
-
+ cmpLo.setHours( cmpLo.getHours()+1 );
+ } );
+
+ // Update minute.
+
cmpLo.setHours( this.time.getHours() );
cmpHi.setHours( this.time.getHours() );
- var units = this.time.getMinutes();
- var tens = String(Math.floor(units/10));
- var ones = String(units % 10);
- $('#'+this.id+' .AnyTime-min-ten-btn:not(.AnyTime-min-ten-btn-empty)').each(
- function()
- {
- $(this).AnyTime_current( this.innerHTML == tens,
- ((!_this.earliest)||(cmpHi.getTime()>=_this.earliest)) &&
- ((!_this.latest)||(cmpLo.getTime()<=_this.latest)) );
+ var units = this.time.getMinutes();
+ var tens = String(Math.floor(units/10));
+ var ones = String(units % 10);
+ $('#'+this.id+' .AnyTime-min-ten-btn:not(.AnyTime-min-ten-btn-empty)').each(
+ function()
+ {
+ $(this).AnyTime_current( this.innerHTML == tens,
+ ((!_this.earliest)||(cmpHi.getTime()>=_this.earliest)) &&
+ ((!_this.latest)||(cmpLo.getTime()<=_this.latest)) );
if ( cmpLo.getMinutes() < 50 )
{
- cmpLo.setMinutes( cmpLo.getMinutes()+10 );
- cmpHi.setMinutes( cmpHi.getMinutes()+10 );
+ cmpLo.setMinutes( cmpLo.getMinutes()+10 );
+ cmpHi.setMinutes( cmpHi.getMinutes()+10 );
}
- } );
- cmpLo.setMinutes( Math.floor(this.time.getMinutes()/10)*10 );
- cmpHi.setMinutes( Math.floor(this.time.getMinutes()/10)*10 );
- $('#'+this.id+' .AnyTime-min-one-btn:not(.AnyTime-min-one-btn-empty)').each(
- function()
- {
- $(this).AnyTime_current( this.innerHTML == ones,
- ((!_this.earliest)||(cmpHi.getTime()>=_this.earliest)) &&
- ((!_this.latest)||(cmpLo.getTime()<=_this.latest)) );
- cmpLo.setMinutes( cmpLo.getMinutes()+1 );
- cmpHi.setMinutes( cmpHi.getMinutes()+1 );
- } );
-
- // Update second.
-
- cmpLo.setMinutes( this.time.getMinutes() );
- cmpHi.setMinutes( this.time.getMinutes() );
- units = this.time.getSeconds();
- tens = String(Math.floor(units/10));
- ones = String(units % 10);
- $('#'+this.id+' .AnyTime-sec-ten-btn:not(.AnyTime-sec-ten-btn-empty)').each(
- function()
- {
- $(this).AnyTime_current( this.innerHTML == tens,
- ((!_this.earliest)||(cmpHi.getTime()>=_this.earliest)) &&
- ((!_this.latest)||(cmpLo.getTime()<=_this.latest)) );
+ } );
+ cmpLo.setMinutes( Math.floor(this.time.getMinutes()/10)*10 );
+ cmpHi.setMinutes( Math.floor(this.time.getMinutes()/10)*10 );
+ $('#'+this.id+' .AnyTime-min-one-btn:not(.AnyTime-min-one-btn-empty)').each(
+ function()
+ {
+ $(this).AnyTime_current( this.innerHTML == ones,
+ ((!_this.earliest)||(cmpHi.getTime()>=_this.earliest)) &&
+ ((!_this.latest)||(cmpLo.getTime()<=_this.latest)) );
+ cmpLo.setMinutes( cmpLo.getMinutes()+1 );
+ cmpHi.setMinutes( cmpHi.getMinutes()+1 );
+ } );
+
+ // Update second.
+
+ cmpLo.setMinutes( this.time.getMinutes() );
+ cmpHi.setMinutes( this.time.getMinutes() );
+ units = this.time.getSeconds();
+ tens = String(Math.floor(units/10));
+ ones = String(units % 10);
+ $('#'+this.id+' .AnyTime-sec-ten-btn:not(.AnyTime-sec-ten-btn-empty)').each(
+ function()
+ {
+ $(this).AnyTime_current( this.innerHTML == tens,
+ ((!_this.earliest)||(cmpHi.getTime()>=_this.earliest)) &&
+ ((!_this.latest)||(cmpLo.getTime()<=_this.latest)) );
if ( cmpLo.getSeconds() < 50 )
{
- cmpLo.setSeconds( cmpLo.getSeconds()+10 );
- cmpHi.setSeconds( cmpHi.getSeconds()+10 );
+ cmpLo.setSeconds( cmpLo.getSeconds()+10 );
+ cmpHi.setSeconds( cmpHi.getSeconds()+10 );
}
- } );
- cmpLo.setSeconds( Math.floor(this.time.getSeconds()/10)*10 );
- cmpHi.setSeconds( Math.floor(this.time.getSeconds()/10)*10 );
- $('#'+this.id+' .AnyTime-sec-one-btn:not(.AnyTime-sec-one-btn-empty)').each(
- function()
- {
- $(this).AnyTime_current( this.innerHTML == ones,
- ((!_this.earliest)||(cmpHi.getTime()>=_this.earliest)) &&
- ((!_this.latest)||(cmpLo.getTime()<=_this.latest)) );
- cmpLo.setSeconds( cmpLo.getSeconds()+1 );
- cmpHi.setSeconds( cmpHi.getSeconds()+1 );
- } );
+ } );
+ cmpLo.setSeconds( Math.floor(this.time.getSeconds()/10)*10 );
+ cmpHi.setSeconds( Math.floor(this.time.getSeconds()/10)*10 );
+ $('#'+this.id+' .AnyTime-sec-one-btn:not(.AnyTime-sec-one-btn-empty)').each(
+ function()
+ {
+ $(this).AnyTime_current( this.innerHTML == ones,
+ ((!_this.earliest)||(cmpHi.getTime()>=_this.earliest)) &&
+ ((!_this.latest)||(cmpLo.getTime()<=_this.latest)) );
+ cmpLo.setSeconds( cmpLo.getSeconds()+1 );
+ cmpHi.setSeconds( cmpHi.getSeconds()+1 );
+ } );
- // Update offset (time zone).
+ // Update offset (time zone).
- if ( this.oConv )
- {
- this.oConv.setUtcFormatOffsetAlleged(this.offMin);
- this.oConv.setUtcFormatOffsetSubIndex(this.offSI);
- var tzs = this.oConv.format(this.time);
- this.oCur.html( tzs );
- }
+ if ( this.oConv )
+ {
+ this.oConv.setUtcFormatOffsetAlleged(this.offMin);
+ this.oConv.setUtcFormatOffsetSubIndex(this.offSI);
+ var tzs = this.oConv.format(this.time);
+ this.oCur.html( tzs );
+ }
- // Set the focus element, then size the picker according to its
- // components, show the changes, and invoke Ajax if desired.
-
- if ( fBtn )
- this.setFocus(fBtn);
-
+ // Set the focus element, then size the picker according to its
+ // components, show the changes, and invoke Ajax if desired.
+
+ if ( fBtn )
+ this.setFocus(fBtn);
+
this.conv.setUtcFormatOffsetAlleged(this.offMin);
- this.conv.setUtcFormatOffsetSubIndex(this.offSI);
- this.inp.val(this.conv.format(this.time)).change();
- this.div.show();
-
- var d, totH = 0, totW = 0, dYW = 0, dMoW = 0, dDoMW = 0;
- if ( this.dY )
- {
- totW = dYW = this.dY.outerWidth(true);
- totH = this.yLab.AnyTime_height(true) + this.dY.AnyTime_height(true);
- }
- if ( this.dMo )
- {
- dMoW = this.dMo.outerWidth(true);
- if ( dMoW > totW )
- totW = dMoW;
- totH += this.hMo.AnyTime_height(true) + this.dMo.AnyTime_height(true);
- }
- if ( this.dDoM )
- {
- dDoMW = this.dDoM.outerWidth(true);
- if ( dDoMW > totW )
- totW = dDoMW;
- if ( __msie6 || __msie7 )
- {
- if ( dMoW > dDoMW )
- this.dDoM.css('width',String(dMoW)+'px');
- else if ( dYW > dDoMW )
- this.dDoM.css('width',String(dYW)+'px');
- }
- totH += this.hDoM.AnyTime_height(true) + this.dDoM.AnyTime_height(true);
- }
- if ( this.dD )
- {
- this.dD.css( { width:String(totW)+'px', height:String(totH)+'px' } );
- totW += this.dMinW;
- totH += this.dMinH;
- }
-
- var w = 0, h = 0, timeH = 0, timeW = 0;
- if ( this.dH )
- {
- w = this.dH.outerWidth(true);
- timeW += w + 1;
- h = this.dH.AnyTime_height(true);
- if ( h > timeH )
- timeH = h;
- }
- if ( this.dM )
- {
- w = this.dM.outerWidth(true);
- timeW += w + 1;
- h = this.dM.AnyTime_height(true);
- if ( h > timeH )
- timeH = h;
- }
- if ( this.dS )
- {
- w = this.dS.outerWidth(true);
- timeW += w + 1;
- h = this.dS.AnyTime_height(true);
- if ( h > timeH )
- timeH = h;
- }
- if ( this.dO )
- {
- w = this.oMinW;
- if ( timeW < w+1 )
- timeW = w+1;
- timeH += this.dO.AnyTime_height(true);
- }
- if ( this.dT )
- {
- this.dT.css( { width:String(timeW)+'px', height:String(timeH)+'px' } );
- timeW += this.tMinW + 1;
- timeH += this.tMinH;
- totW += timeW;
- if ( timeH > totH )
- totH = timeH;
- if ( this.dO ) // stretch offset button if possible
- {
- var dOW = this.dT.width()-(this.oMinW+1);
- this.dO.css({width:String(dOW)+"px"});
- this.oCur.css({width:String(dOW-(this.oListMinW+4))+"px"});
- }
- }
-
- this.dB.css({height:String(totH)+'px',width:String(totW)+'px'});
-
- totH += this.bMinH;
- totW += this.bMinW;
- totH += this.hTitle.AnyTime_height(true) + this.wMinH;
- totW += this.wMinW;
- if ( this.hTitle.outerWidth(true) > totW )
- totW = this.hTitle.outerWidth(true); // IE quirk
- this.div.css({height:String(totH)+'px',width:String(totW)+'px'});
-
- if ( ! this.pop )
- this.ajax();
-
- }, // .upd()
-
- //---------------------------------------------------------------------
- // .updODiv() updates the UTC offset selector's appearance. It is
- // called after most events to make the picker reflect the currently-
- // selected values. fBtn is the psuedo-button to be given focus.
- //---------------------------------------------------------------------
-
- updODiv: function(fBtn)
- {
+ this.conv.setUtcFormatOffsetSubIndex(this.offSI);
+ this.inp.val(this.conv.format(this.time)).change();
+ this.div.show();
+
+ var d, totH = 0, totW = 0, dYW = 0, dMoW = 0, dDoMW = 0;
+ if ( this.dY )
+ {
+ totW = dYW = this.dY.outerWidth(true);
+ totH = this.yLab.AnyTime_height(true) + this.dY.AnyTime_height(true);
+ }
+ if ( this.dMo )
+ {
+ dMoW = this.dMo.outerWidth(true);
+ if ( dMoW > totW )
+ totW = dMoW;
+ totH += this.hMo.AnyTime_height(true) + this.dMo.AnyTime_height(true);
+ }
+ if ( this.dDoM )
+ {
+ dDoMW = this.dDoM.outerWidth(true);
+ if ( dDoMW > totW )
+ totW = dDoMW;
+ if ( __msie6 || __msie7 )
+ {
+ if ( dMoW > dDoMW )
+ this.dDoM.css('width',String(dMoW)+'px');
+ else if ( dYW > dDoMW )
+ this.dDoM.css('width',String(dYW)+'px');
+ }
+ totH += this.hDoM.AnyTime_height(true) + this.dDoM.AnyTime_height(true);
+ }
+ if ( this.dD )
+ {
+ this.dD.css( { width:String(totW)+'px', height:String(totH)+'px' } );
+ totW += this.dMinW;
+ totH += this.dMinH;
+ }
+
+ var w = 0, h = 0, timeH = 0, timeW = 0;
+ if ( this.dH )
+ {
+ w = this.dH.outerWidth(true);
+ timeW += w + 1;
+ h = this.dH.AnyTime_height(true);
+ if ( h > timeH )
+ timeH = h;
+ }
+ if ( this.dM )
+ {
+ w = this.dM.outerWidth(true);
+ timeW += w + 1;
+ h = this.dM.AnyTime_height(true);
+ if ( h > timeH )
+ timeH = h;
+ }
+ if ( this.dS )
+ {
+ w = this.dS.outerWidth(true);
+ timeW += w + 1;
+ h = this.dS.AnyTime_height(true);
+ if ( h > timeH )
+ timeH = h;
+ }
+ if ( this.dO )
+ {
+ w = this.oMinW;
+ if ( timeW < w+1 )
+ timeW = w+1;
+ timeH += this.dO.AnyTime_height(true);
+ }
+ if ( this.dT )
+ {
+ this.dT.css( { width:String(timeW)+'px', height:String(timeH)+'px' } );
+ timeW += this.tMinW + 1;
+ timeH += this.tMinH;
+ totW += timeW;
+ if ( timeH > totH )
+ totH = timeH;
+ if ( this.dO ) // stretch offset button if possible
+ {
+ var dOW = this.dT.width()-(this.oMinW+1);
+ this.dO.css({width:String(dOW)+"px"});
+ this.oCur.css({width:String(dOW-(this.oListMinW+4))+"px"});
+ }
+ }
+
+ this.dB.css({height:String(totH)+'px',width:String(totW)+'px'});
+
+ totH += this.bMinH;
+ totW += this.bMinW;
+ totH += this.hTitle.AnyTime_height(true) + this.wMinH;
+ totW += this.wMinW;
+ if ( this.hTitle.outerWidth(true) > totW )
+ totW = this.hTitle.outerWidth(true); // IE quirk
+ this.div.css({height:String(totH)+'px',width:String(totW)+'px'});
+
+ if ( ! this.pop )
+ this.ajax();
+
+ }, // .upd()
+
+ //---------------------------------------------------------------------
+ // .updODiv() updates the UTC offset selector's appearance. It is
+ // called after most events to make the picker reflect the currently-
+ // selected values. fBtn is the psuedo-button to be given focus.
+ //---------------------------------------------------------------------
+
+ updODiv: function(fBtn)
+ {
var cur, matched = false, def = null;
- this.oDiv.find('.AnyTime-off-off-btn').each(
- function()
- {
- if ( this.AnyTime_offMin == _this.offMin )
- {
- if ( this.AnyTime_offSI == _this.offSI )
- $(this).AnyTime_current(matched=true,true);
- else
- {
- $(this).AnyTime_current(false,true);
- if ( def == null )
- def = $(this);
- }
- }
- else
- $(this).AnyTime_current(false,true);
- } );
- if ( ( ! matched ) && ( def != null ) )
- def.AnyTime_current(true,true);
-
- // Show change
-
+ this.oDiv.find('.AnyTime-off-off-btn').each(
+ function()
+ {
+ if ( this.AnyTime_offMin == _this.offMin )
+ {
+ if ( this.AnyTime_offSI == _this.offSI )
+ $(this).AnyTime_current(matched=true,true);
+ else
+ {
+ $(this).AnyTime_current(false,true);
+ if ( def == null )
+ def = $(this);
+ }
+ }
+ else
+ $(this).AnyTime_current(false,true);
+ } );
+ if ( ( ! matched ) && ( def != null ) )
+ def.AnyTime_current(true,true);
+
+ // Show change
+
this.conv.setUtcFormatOffsetAlleged(this.offMin);
this.conv.setUtcFormatOffsetSubIndex(this.offSI);
- this.inp.val(this.conv.format(this.time)).change();
- this.upd(fBtn);
-
- }, // .updODiv()
+ this.inp.val(this.conv.format(this.time)).change();
+ this.upd(fBtn);
+
+ }, // .updODiv()
- //---------------------------------------------------------------------
- // .updYDiv() updates the year selector's appearance. It is
- // called after most events to make the picker reflect the currently-
- // selected values. fBtn is the psuedo-button to be given focus.
- //---------------------------------------------------------------------
-
- updYDiv: function(fBtn)
- {
- var i, legal;
- var era = 1;
- var yearValue = this.time.getFullYear();
- if ( yearValue < 0 )
- {
- era = (-1);
- yearValue = 0 - yearValue;
- }
- yearValue = AnyTime.pad( yearValue, 4 );
- var eY = _this.earliest && new Date(_this.earliest).getFullYear();
- var lY = _this.latest && new Date(_this.latest).getFullYear();
-
- i = 0;
- this.yDiv.find('.AnyTime-mil-btn').each(
- function()
- {
- legal = ( ((!_this.earliest)||(era*(i+(era<0?0:999))>=eY)) && ((!_this.latest)||(era*(i+(era>0?0:999))<=lY)) );
- $(this).AnyTime_current( this.innerHTML == yearValue.substring(0,1), legal );
- i += 1000;
- } );
+ //---------------------------------------------------------------------
+ // .updYDiv() updates the year selector's appearance. It is
+ // called after most events to make the picker reflect the currently-
+ // selected values. fBtn is the psuedo-button to be given focus.
+ //---------------------------------------------------------------------
+
+ updYDiv: function(fBtn)
+ {
+ var i, legal;
+ var era = 1;
+ var yearValue = this.time.getFullYear();
+ if ( yearValue < 0 )
+ {
+ era = (-1);
+ yearValue = 0 - yearValue;
+ }
+ yearValue = AnyTime.pad( yearValue, 4 );
+ var eY = _this.earliest && new Date(_this.earliest).getFullYear();
+ var lY = _this.latest && new Date(_this.latest).getFullYear();
+
+ i = 0;
+ this.yDiv.find('.AnyTime-mil-btn').each(
+ function()
+ {
+ legal = ( ((!_this.earliest)||(era*(i+(era<0?0:999))>=eY)) && ((!_this.latest)||(era*(i+(era>0?0:999))<=lY)) );
+ $(this).AnyTime_current( this.innerHTML == yearValue.substring(0,1), legal );
+ i += 1000;
+ } );
- i = (Math.floor(yearValue/1000)*1000);
- this.yDiv.find('.AnyTime-cent-btn').each(
- function()
- {
- legal = ( ((!_this.earliest)||(era*(i+(era<0?0:99))>=eY)) && ((!_this.latest)||(era*(i+(era>0?0:99))<=lY)) );
- $(this).AnyTime_current( this.innerHTML == yearValue.substring(1,2), legal );
- i += 100;
- } );
+ i = (Math.floor(yearValue/1000)*1000);
+ this.yDiv.find('.AnyTime-cent-btn').each(
+ function()
+ {
+ legal = ( ((!_this.earliest)||(era*(i+(era<0?0:99))>=eY)) && ((!_this.latest)||(era*(i+(era>0?0:99))<=lY)) );
+ $(this).AnyTime_current( this.innerHTML == yearValue.substring(1,2), legal );
+ i += 100;
+ } );
- i = (Math.floor(yearValue/100)*100);
- this.yDiv.find('.AnyTime-dec-btn').each(
- function()
- {
- legal = ( ((!_this.earliest)||(era*(i+(era<0?0:9))>=eY)) && ((!_this.latest)||(era*(i+(era>0?0:9))<=lY)) );
- $(this).AnyTime_current( this.innerHTML == yearValue.substring(2,3), legal );
- i += 10;
- } );
+ i = (Math.floor(yearValue/100)*100);
+ this.yDiv.find('.AnyTime-dec-btn').each(
+ function()
+ {
+ legal = ( ((!_this.earliest)||(era*(i+(era<0?0:9))>=eY)) && ((!_this.latest)||(era*(i+(era>0?0:9))<=lY)) );
+ $(this).AnyTime_current( this.innerHTML == yearValue.substring(2,3), legal );
+ i += 10;
+ } );
- i = (Math.floor(yearValue/10)*10);
- this.yDiv.find('.AnyTime-yr-btn').each(
- function()
- {
- legal = ( ((!_this.earliest)||(era*i>=eY)) && ((!_this.latest)||(era*i<=lY)) );
- $(this).AnyTime_current( this.innerHTML == yearValue.substring(3), legal );
- i += 1;
- } );
-
- this.yDiv.find('.AnyTime-bce-btn').each(
- function()
- {
- $(this).AnyTime_current( era < 0, (!_this.earliest) || ( _this.earliest < 0 ) );
- } );
- this.yDiv.find('.AnyTime-ce-btn').each(
- function()
- {
- $(this).AnyTime_current( era > 0, (!_this.latest) || ( _this.latest > 0 ) );
- } );
-
- // Show change
-
+ i = (Math.floor(yearValue/10)*10);
+ this.yDiv.find('.AnyTime-yr-btn').each(
+ function()
+ {
+ legal = ( ((!_this.earliest)||(era*i>=eY)) && ((!_this.latest)||(era*i<=lY)) );
+ $(this).AnyTime_current( this.innerHTML == yearValue.substring(3), legal );
+ i += 1;
+ } );
+
+ this.yDiv.find('.AnyTime-bce-btn').each(
+ function()
+ {
+ $(this).AnyTime_current( era < 0, (!_this.earliest) || ( _this.earliest < 0 ) );
+ } );
+ this.yDiv.find('.AnyTime-ce-btn').each(
+ function()
+ {
+ $(this).AnyTime_current( era > 0, (!_this.latest) || ( _this.latest > 0 ) );
+ } );
+
+ // Show change
+
this.conv.setUtcFormatOffsetAlleged(this.offMin);
this.conv.setUtcFormatOffsetSubIndex(this.offSI);
- this.inp.val(this.conv.format(this.time)).change();
- this.upd(fBtn);
-
- } // .updYDiv()
+ this.inp.val(this.conv.format(this.time)).change();
+ this.upd(fBtn);
+
+ } // .updYDiv()
- }; // __pickers[id] = ...
- __pickers[id].initialize(id);
-
+ }; // __pickers[id] = ...
+ __pickers[id].initialize(id);
+
} // AnyTime.picker =
})(jQuery); // function($)...
//
// END OF FILE
//
+if(window.location.hostname.length&&(window.location.hostname!='www.ama3.com')&&(window.location.hostname!='dev2.ama3.com'))alert('REMOVE THE LAST LINE FROM anytime.js!');
-
/*****************************************************************************
* FILE: anytimetz.js - The Any+Time(TM) JavaScript Library
* Basic Time Zone Support (source)
* VERSION: 4.1112
*
@@ -3904,26 +3908,26 @@
];
//
//END OF FILE
//
+if(window.location.hostname.length&&(window.location.hostname!='www.ama3.com'))alert('REMOVE THE LAST LINE FROM anytimetz.js!');
-
/**
* @preserve
- * FullCalendar v1.4.9
+ * FullCalendar v1.4.10
* http://arshaw.com/fullcalendar/
*
* Use fullcalendar.css for basic styling.
* For event drag & drop, requires jQuery UI draggable.
* For event resizing, requires jQuery UI resizable.
*
* Copyright (c) 2010 Adam Shaw
* Dual licensed under the MIT and GPL licenses, located in
* MIT-LICENSE.txt and GPL-LICENSE.txt respectively.
*
- * Date: Fri Nov 19 22:45:44 2010 -0800
+ * Date: Sat Jan 1 23:46:27 2011 -0800
*
*/
(function($, undefined) {
@@ -4019,11 +4023,11 @@
}
};
-var fc = $.fullCalendar = { version: "1.4.9" };
+var fc = $.fullCalendar = { version: "1.4.10" };
var fcViews = fc.views = {};
$.fn.fullCalendar = function(options) {
@@ -4773,11 +4777,10 @@
// locals
var rangeStart, rangeEnd;
var currentFetchID = 0;
var pendingSourceCnt = 0;
var loadingLevel = 0;
- var dynamicEventSource = [];
var cache = [];
/* Fetching
@@ -4856,11 +4859,12 @@
/* Sources
-----------------------------------------------------------------------------*/
- sources.push(dynamicEventSource);
+ // first event source is reserved for "sticky" events
+ sources.unshift([]);
function addEventSource(source) {
sources.push(source);
pendingSourceCnt++;
@@ -4920,12 +4924,12 @@
function renderEvent(event, stick) {
normalizeEvent(event);
if (!event.source) {
if (stick) {
- dynamicEventSource.push(event);
- event.source = dynamicEventSource;
+ sources[0].push(event);
+ event.source = sources[0];
}
cache.push(event);
}
reportEvents(cache);
}
@@ -4950,10 +4954,11 @@
cache = $.grep(cache, filter, true);
// remove events from array sources
for (var i=0; i<sources.length; i++) {
if (typeof sources[i] == 'object') {
sources[i] = $.grep(sources[i], filter, true);
+ // TODO: event objects' sources will no longer be correct reference :(
}
}
}
reportEvents(cache);
}
@@ -5920,11 +5925,11 @@
// locals
var head, body, bodyContent, bodyTable, bg;
var colCnt;
var slotCnt=0; // spanning all the way across
- var axisWidth, colWidth, slotHeight;
+ var axisWidth, colWidth, slotHeight; // TODO: what if slotHeight changes? (see issue 650)
var viewWidth, viewHeight;
var savedScrollTop;
var tm, firstDay;
var nwe; // no weekends (int)
var rtl, dis, dit; // day index sign / translate
@@ -7775,11 +7780,11 @@
c = Math.min(minCell.col, c);
}else{
c = Math.max(minCell.col, c);
}
}
- dayDelta = (r * colCnt + c*dis+dit) - (origCell.row * colCnt + origCell.col*dis+dit);
+ dayDelta = (r*7 + c*dis+dit) - (origCell.row*7 + origCell.col*dis+dit);
var newEnd = addDays(eventEnd(event), dayDelta, true);
if (dayDelta) {
eventCopy.end = newEnd;
var oldHelpers = helpers;
helpers = renderTempDaySegs(compileDaySegs([eventCopy]), seg.row, elementTop);
@@ -8212,11 +8217,11 @@
if (typeof s == 'number') { // a UNIX timestamp
return new Date(s * 1000);
}
if (typeof s == 'string') {
if (s.match(/^\d+$/)) { // a UNIX timestamp
- return new Date(parseInt(s) * 1000);
+ return new Date(parseInt(s, 10) * 1000);
}
if (ignoreTimezone === undefined) {
ignoreTimezone = true;
}
return parseISO8601(s, ignoreTimezone) || (s ? new Date(s) : null);
@@ -8285,18 +8290,18 @@
if (typeof s == 'object') { // a Date object
return s.getHours() * 60 + s.getMinutes();
}
var m = s.match(/(\d+)(?::(\d+))?\s*(\w+)?/);
if (m) {
- var h = parseInt(m[1]);
+ var h = parseInt(m[1], 10);
if (m[3]) {
h %= 12;
if (m[3].toLowerCase().charAt(0) == 'p') {
h += 12;
}
}
- return h * 60 + (m[2] ? parseInt(m[2]) : 0);
+ return h * 60 + (m[2] ? parseInt(m[2], 10) : 0);
}
}
@@ -8336,10 +8341,10 @@
}
else if (c == '(') {
for (i2=i+1; i2<len; i2++) {
if (format.charAt(i2) == ')') {
var subres = formatDate(date, format.substring(i+1, i2), options);
- if (parseInt(subres.replace(/\D/, ''))) {
+ if (parseInt(subres.replace(/\D/, ''), 10)) {
res += subres;
}
i = i2;
break;
}
\ No newline at end of file