Commit Graph

354 Commits

Author SHA1 Message Date
rwldrn
3b50eaca2c Fixes #7229 and #5803 2010-10-24 12:18:33 -04:00
Justin Meyer
f3d610e064 beforedeactivate will fire before focusout - use that to our advantage when working with the change event. 2010-10-13 10:38:29 -04:00
Justin Meyer
88068f82c1 Make sure that focusin/focusout bubbles in non-IE browsers. 2010-10-13 10:35:28 -04:00
Colin Snover
1518ae1aed Fix patch for #7150, which was not deleting the events object properly on plain JS objects. Thanks to jitter for catching it. 2010-10-12 18:49:37 -05:00
Colin Snover
ff6ceadbfd Use a key name less likely to result in collisions for events on plain JS objects. Fixes bug #7150. 2010-10-11 23:35:18 -05:00
John Resig
1df5084c97 Handle some edge cases with binding events to the window object (which is also a plain object - causing some confusion). Fixes #7143. 2010-10-11 18:20:57 -04:00
jeresig
884de15fb9 Make sure that the unload event doesn't leak in IE - use jQuery's binding mechanism to make that happen. 2010-10-10 18:01:59 -04:00
jeresig
cbf9d874e5 Change event did not fire in IE when an explicit .focus() was used. Fixes #6374. 2010-10-09 19:04:15 -04:00
jeresig
79305ed146 Fix the case where live change was breaking if a live click was bound ahead of time. Very similar to #6359. Fixes #6505. 2010-10-09 18:16:08 -04:00
David Petersen
60744e8abd Set event.LiveFired to undefined in specialSubmit handler so that click events bound before the submit won't prevent the submit to fire. Fixes #6359 2010-09-30 13:46:36 -04:00
Dave Reed
cb811c04b0 Using data() on JavaScript objects sets fields directly on the object. Note that events are now a property of a function (to avoid JSON serialization - and only in the case of JavaScript objects, not DOM nodes). Fixes #6807. 2010-09-29 06:46:25 -07:00
John Resig
ab77451843 Fix mis-type in commit e3c4e57897. Thanks to @jdalton for the catch. 2010-09-28 20:13:40 -07:00
John Resig
e3c4e57897 Tweak the logic for fixing event.which. Fixes #2338. 2010-09-28 09:07:57 -07:00
Dave Methvin
adff8e45e2 If an inline handler returns false, call event.preventDefault(). Fixes #6337. 2010-09-24 18:02:31 -04:00
dmethvin
69994211b0 Don't copy event.originalTarget, it's a Netscape-specific property. Fixes #2814. 2010-09-24 17:44:48 -04:00
Robert Katic
da5706c974 Added support for map of events in live, die, delegate and undelegate. Fixes #6282. 2010-09-23 12:07:42 -04:00
jeresig
a7aa86d0b1 Fix missing var. Thanks to @jeff-themovie for the catch. 2010-09-22 16:56:48 -04:00
jeresig
c8dd49f756 Unify the means of detecting a window across the library. Fixes jQuery UI bug #5438 and jQuery bugs #6575 and 6088. 2010-09-22 16:41:51 -04:00
jeresig
9dc6e0c572 Applied the RegExp issues reported by Jeff Robinson here: http://jmrware.com/articles/2010/jqueryregex/jQueryRegexes.html Additionally broke out all remaining inline RegExp. Fixes #7062. 2010-09-22 09:16:28 -04:00
jeresig
be59693037 No need to set returnValue if preventDefault exists. Thanks kangax for the catch. 2010-09-20 10:16:36 -04:00
jeresig
acb162a697 Make sure that the removeEvent and buildFragment private functions are exposed (to help with access across modules). The final API for each of these is very much in flux and will likely change before the final release. Fixes #7011. 2010-09-08 18:13:35 -04:00
jeresig
bca5765502 Make sure that jQuery works even when the individual modules are loaded separately AND jQuery.noConflict(true) is used. Fixes #7011. 2010-09-08 13:54:33 -04:00
John Resig
1533bf7c77 Expose jQuery.uuid (use with caution) and make sure the expando property is used in the events module. 2010-04-24 14:16:27 -07:00
jeresig
8effe3a7de Made it so that you no longer need to build jQuery in order to run the test suite (but you'll still need a checkout of QUnit and Sizzle, at least). 2010-03-23 12:12:16 -04:00
jeresig
f68b46d7ab Make sure that special remove and teardown events get called when .die() is used. Additionally made sure that default actions are triggered when namespaced events are used. Fixes #6202 and #6250. 2010-03-09 12:22:25 -05:00
jeresig
9584e908a2 Added in Ben Alman's proposed event.namespace property (the property holds the namespaces specified in a call to trigger). Additionally fixes namespaces with .live(). Fixes #6208 and #6209. 2010-03-02 17:34:12 -05:00
jeresig
dcf0fa5048 More changes to get jQuery in line with JSLint. 2010-03-01 21:24:49 -05:00
jeresig
a4043cdcbf Land some additional tweaks related to running through JSLint. 2010-03-01 18:19:29 -05:00
jeresig
a18f682012 Made some code tweaks related to running jQuery through JSLint (thanks to Lorin Larson for the JSLint run). 2010-03-01 12:44:56 -05:00
jeresig
36faab439a No reason to double-bind the beforeunload event. Fixes #6113. 2010-02-27 10:03:43 -05:00
jeresig
42568db4c4 Merge branch 'master' of github.com:jquery/jquery 2010-02-27 09:02:18 -05:00
jeresig
a45372a4c5 Adding in .bind(name, false), .unbind(name, false) support - an easy way to just stop bubbling and the default action on an element. Fixes #6188. 2010-02-27 09:02:13 -05:00
brandonaaron
7d5da0ee03 Make sure events exist before trying to access them in jQuery.event.handle and removed unnecessary var statement. Fixes #6163. 2010-02-27 01:31:33 -06:00
jeresig
ba7195e3f9 Make it so that you can pass in event data to .click(), et. al. Fixes #6187. 2010-02-26 20:01:19 -05:00
jeresig
7f5179b654 Make sure that unbinding on a plain javascript object works correctly. Fixes #6184. 2010-02-26 11:32:12 -05:00
jeresig
28b489bfc8 Make sure that the correct type is set for live mouseenter/mouseleave events. Fixes #6169. 2010-02-26 11:23:49 -05:00
jeresig
26b0e913dd Make sure that live events bubble unless explicitly told not to, like a normal event. Fixes #6182. 2010-02-26 09:26:14 -05:00
jeresig
da966573c3 Make sure that elements that have been removed also have their special events cleaned up. Fixes #6084. 2010-02-13 06:10:43 -05:00
jeresig
6a82f2ae63 Make sure that mousing over XUL elements results in no trigger of a mouseleave. Fixes #6013. 2010-02-13 05:45:48 -05:00
jeresig
dd5c26304a Make sure that live focus and blur events also bind to the regular events, to handle triggered events. Fixes #6055. 2010-02-13 05:37:17 -05:00
jeresig
467063a2e2 When binding a change directly to a file input just passthrough to the normal bind. A temporary fix for #5997, needs more investigation. 2010-02-13 04:40:26 -05:00
jeresig
8404ad6070 Make sure that there are some live events before continuing on. 2010-02-12 19:38:57 -05:00
jeresig
5d36fe3210 Make sure that live mouseenter/mouseleave work properly. Fixes #6077. 2010-02-11 16:50:26 -05:00
John Resig
021b809ace Make sure that the teardown is called after all the handlers of a type are removed. Fixes #6065. 2010-02-11 01:42:51 -05:00
jeresig
35c379075c Simplify the special change/submit event removal logic, per Scott's suggestion in 5267824aa3. 2010-02-10 15:56:53 -05:00
jeresig
5267824aa3 Updated formatting for the change/submit special event logic. Also switched the function declarations to statements. Thanks to Garrett for the recommendation. 2010-02-08 23:28:15 -05:00
jeresig
75bb2d6e51 Fix in logic for handling exclusive namespace testing. Fixes #6048. 2010-02-08 11:31:01 -05:00
jeresig
43b3ed086d Update special events to work with the internal event system changes. Also fixes #5967. 2010-02-05 11:02:56 -05:00
jeresig
be2407e233 Rewrote the live event handling to use the new event logic. Also added in support for live namespaced events. Fixes #5945. 2010-02-04 21:36:32 -05:00
jeresig
e7912805d6 A large refactor of the event handling logic. Data and namespace information is maintained in a separate object now, no longer on the event handler. Proxy functions are no longer needed, as a result. Additionally execution order of the handlers is maintained, fixing #4261, and the execution of handlers is maintained even while they're being removed. Live events will be refactored separately. 2010-02-04 00:20:52 -05:00
jeresig
31432e048f Add .delegate() and .undelegate(). An alternative to using .live() which goes from a single root and filters by the specified selectors. Should be used like do: .delegate(td, hover, someFn);. Fixes #6005. 2010-02-01 18:06:03 -05:00
jeresig
98c7248518 Further optimize the empty/remove/cleanData logic. 2010-01-28 15:25:52 -05:00
jeresig
0252b78201 Provide a way to simulate default browser actions. Fixes #5973. 2010-01-28 14:34:09 -05:00
jeresig
e9092e9954 Make sure namespaces is always an array, when passed to the remove special. Follow-up to eed69eccc5. 2010-01-28 14:16:52 -05:00
jeresig
eed69eccc5 Make sure that jQuery.data( elem ) always returns a data object, fixes #5971. Improve the performance of .bind() and .unbind(), fixes #5972. 2010-01-28 14:12:44 -05:00
jeresig
942f8f7f75 No reason to limit the initial change data store to just radio elements. Fixes #5851. 2010-01-27 10:06:50 -05:00
jeresig
390186b902 Make sure that special.add actually copies over event namespaces and data. Fixes #5779 and #5834. 2010-01-25 17:01:07 -05:00
jeresig
0474917c9d Make sure multiple bound events have their namespaces and data maintained. Fixes #3549. 2010-01-25 16:45:39 -05:00
jeresig
d24443fb55 Make sure that it's possible to preventDefault natively-triggered (submit, focus, blur, click) events. Fixes #5695. 2010-01-25 13:45:07 -05:00
jeresig
3e286440d5 Make sure that .die() with no args works. Fixes #5789. 2010-01-23 16:37:12 -05:00
Matt Curry
f6ec9d54d1 Select (with a selected) fired change on first focus in IE. Fixes #5869. 2010-01-23 12:52:32 -05:00
Irae Brasil
01f72026ec Added support for multiple live event handlers, live hover, and live focus/blur (mapped to focusin/focusout). Fixes #5804, #5801, #5852. 2010-01-23 11:56:24 -05:00
Irae Brasil
b9ca157998 Make sure that live handlers don't stop inline scripts from executing. Fixes #5835. 2010-01-23 11:14:29 -05:00
Irae Brasil
150e44cdda Make sure non-left-click events don't bubble. Fixes #3861. 2010-01-23 11:12:26 -05:00
jeresig
435772e29b Adding in the change recommended by Alexander Farkas to fix some bugs in the change delegation logic. Fixes #5851. 2010-01-18 17:52:36 -05:00
jeresig
257a4693f4 Fix missing var declaration for the length iterator. 2010-01-18 17:19:44 -05:00
John Resig
199a721103 Expose the proxy object on the object, for the benefit of plugin authors (Thanks to Justin Meyer for the suggestion). 2010-01-15 15:41:09 -05:00
John Resig
4397f0fd41 Removed extraneous thisObject references. Thanks to Matt Dunlap for the heads-up. 2010-01-14 01:42:08 -05:00
jeresig
1960f28c0b Make sure no exception is thrown if no event handler is found (which is the case for applets, objects, and embeds). 2010-01-13 11:24:54 -05:00
jeresig
8e53f7b5d6 Fixed typo in logic, also disabled function setters in this case to allow the functions to passthrough and bind. 2010-01-12 21:54:06 -05:00
jeresig
1d8b3a9af2 Make sure that the focusin and focusout easy-bind methods are exposed. 2010-01-12 17:03:34 -05:00
jeresig
366039a6f0 Revert "Adding in backwards-compatiblity support for jQuery().bind/unbind/trigger - and immediately deprecating it. Please explicitly use jQuery(document) in your code."
This reverts commit e9d5947b4a.
2010-01-11 13:48:40 -05:00
jeresig
5a0ac24e35 Make sure that submit event is still bound for regular form submit events. Thanks to Mark Gibson for the fix suggestion. 2010-01-11 12:26:28 -05:00
jeresig
e9d5947b4a Adding in backwards-compatiblity support for jQuery().bind/unbind/trigger - and immediately deprecating it. Please explicitly use jQuery(document) in your code. 2010-01-06 11:32:29 -05:00
jeresig
230614b4df Merging in jQuery.proxy() branch. 2010-01-05 19:18:39 -05:00
jeresig
8db0dd2c64 Added in a holdover jQuery.event.guid for back-compat (two plugins use it: mousewheel and a datepicker). Plugin authors should work to stop using jQuery.event.guid and jQuery.event.proxy ASAP. 2010-01-05 19:17:28 -05:00
jeresig
a5dbca4a06 Moved jQuery.proxy() into core. 2009-12-31 15:06:45 -05:00
jeresig
40ce7f9830 Merge branch 'bug-5735' 2009-12-31 14:49:01 -05:00
jeresig
6cb2945837 Rather than declaring empty anonymous functions all around, introduce and use a single empty function. Thanks to Matt Kruse for the suggestion. 2009-12-31 09:50:49 -05:00
jeresig
ea5d514008 When .bind('unload') was called it accidentally went recursive, from 1bac61655b. Fixes #5688. 2009-12-31 00:49:53 -05:00
jeresig
66975de2d2 Remove the .bind(name, fn, thisObject) and promote jQuery.event.proxy() to jQuery.proxy() as alternative to handling scoping on callbacks. Fixes #5736. 2009-12-31 00:37:23 -05:00
jeresig
7e69fdbad4 Fixed spelling mistake noted in dc6b7ce3469eaadb37a151d449e8d36571d1894. 2009-12-21 20:19:49 -05:00
jeresig
3776cbe314 Standardize on using double-quotes for string literals. 2009-12-21 20:13:16 -05:00
jeresig
61e37d4149 Made a number of spacing changes to bring the code more-inline with the jQuery Core Style Guideline. 2009-12-21 19:58:13 -05:00
jeresig
36c99dc0c7 Tweaked the syntax of withinElement a bit. 2009-12-21 18:06:23 -05:00
jeresig
e083d15fc7 Tweaked a couple cases where == was used instead of ===. 2009-12-21 18:02:02 -05:00
Alexander Farkas
209751fcbd Make sure that the beforeactivate event isn't accidentally prevented. 2009-12-21 16:24:03 -05:00
Jörn Zaefferer
03481a52c7 Stop trying to emulate the focus/blur event in IE, doesn't work as one might expect, anyway. Instead, implement the focusin/focusout events in all other browsers - which creates a much better parity across all browsers. Uses event capturing instead of bubbling to make it happen. Thanks to Alexander for the recommendation and to Joern Zaefferer for the original focus/blur delegation code. 2009-12-21 16:10:21 -05:00
Alexander Farkas
5dc6b7ce34 Used the patch from Alexander as the basis for a rewrite of the IE change event logic. Now has full parity with the regular change event in other browsers: Works with regular bind, works better with multiple selects, works as a regular change event (note test suite changes), works with readonly/disabled inputs, and much more. The original patch had a number of problems, including firing the change event too many times, not bubblinb properly, and not handling clicks on multi-selects properly - that should all be fixed now. Thanks Alexander for the patch pushing in the right direction. 2009-12-21 15:32:32 -05:00
jeresig
1feb92afb4 Make sure that we don't bind the onunload event in Opera. 2009-12-18 22:35:02 -05:00
jeresig
42f8c3add3 No need to use the conditional comment for binding the onunload event in IE. 2009-12-18 20:29:22 -05:00
jeresig
9997620420 Retooled the arguments.callee-related changes in 98ce35d52b to avoid re-declarations where possible. 2009-12-16 16:45:00 -05:00
jeresig
fe9333cc79 No need to use jQuery's event system for binding the onunload event in IE. 2009-12-16 15:42:03 -05:00
John Resig
253e73af51 Fixed typo from commit 542099a278. 2009-12-11 12:49:22 -08:00
Karl Swedberg
1bac61655b combined jQuery.bind() and jQuery.one() to make them more DRY 2009-12-10 14:44:30 -08:00
John Resig
f25eedf32a Restrict the attr quick setters to only methods that specifically ask for the functionality. Fixes #5612. 2009-12-09 21:28:33 -08:00
John Resig
b846ad4ca0 Add a try/catch to handle the exception thrown by unloaded iframes in IE. Fixes #4280. 2009-12-09 16:00:59 -08:00
John Resig
3ec2f1aef6 Make sure that we don't try to trigger non-existant native events on applets, embed, objects, etc. as it'll cause an exception with Java applets. Fixes #2414. 2009-12-09 14:49:31 -08:00
John Resig
1052792bb2 Fixed problems with removing live events. Fixes #4894. 2009-12-09 14:43:53 -08:00
John Resig
86bbf9cf87 We have to access the native event handlers/triggers directly, otherwise they won't execute in most modern browsers. Fixes #5124. 2009-12-09 13:53:07 -08:00
John Resig
98ce35d52b Removed uses of arguments.callee from jQuery. 2009-12-07 16:42:25 -08:00
John Resig
00a0abb751 Moved .ready() to core.js from event.js. 2009-12-07 16:34:55 -08:00
John Resig
97323d192f Oops, missed a closing } from 7d36ccfa8e. 2009-12-07 07:38:16 -08:00
John Resig
7d36ccfa8e Broke out the logic for the bubbling change/submit events so that they aren't bound if they aren't used. 2009-12-06 18:20:08 -08:00
John Resig
542099a278 Make sure that we're doing proper focus bubble testing. Also simplified the logic for the IE focusin/focusout handling. 2009-12-06 18:02:58 -08:00
John Resig
aea5b09195 Adding in cross-browser onbeforeunload support. Fixes #4106. 2009-12-06 16:55:08 -08:00
lrbabe
2d27e053a0 Fix inverted 'orig' and 'fix' event in mouseenter/mouseleave special events. 2009-12-06 09:13:57 +08:00
Karl Swedberg
3afc6533e2 added semicolons to end of 2 statements (and fixed a misspelled word in comment) 2009-12-06 08:55:54 +08:00
John Resig
8d1efee316 Retooled the native triggering code, simplifying it. 2009-12-04 23:18:05 -05:00
Justin Meyer
d42afd0f65 Adding in support for bubbling submit and change events, thanks to the patch by Justin Meyer. Includes a delegation test suite for manually testing to see if the events work as intended. 2009-12-04 11:28:50 -05:00
jeresig
c3b2aa9928 Landed the rest of the liveHandler rewrite that takes advantage of the new closest multi-selector signature (sorry, accidentally committed some of it in the wrong commit: 4daae7a79f). 2009-12-03 11:15:26 -05:00
jeresig
4daae7a79f No need to do the closest match if no selectors are passed in. 2009-12-03 10:51:04 -05:00
Karl Swedberg
ddb86f8d5b added curly braces around all if/else statements 2009-11-28 04:09:14 +08:00
Robert Katic
0bb3998a6a Re-adding zeros removed from slice calls in last commit. 2009-11-26 00:58:39 +08:00
Robert Katic
04dbdb7525 Corrected RegExp to match event namespaces. Fixes #5303. 2009-11-26 00:58:39 +08:00
Andrea Giammarchi
3a23a5c17d Changed the === undefined ready event check to == null since frameElement is usually null and was skipping the normal line of checks. 2009-11-17 10:45:01 -05:00
Rich Dougherty
bf71575bb4 Land Rich's fix for not using window.top to do frame detection. Fixes #4787. 2009-11-11 13:56:39 -05:00
Mr Speaker
5cb1163469 Making sure that you can bind multiple toggles to a single element without problems. Thanks to 'Mr Speaker' for the original patch. Fixes #5274. 2009-11-11 09:46:24 -05:00
John Resig
262fcf7b7b Require that, at least, document.body exists before firing the ready event. This may stop jQuery from working on pages that don't create a document.body (such as Safari, when no body exists) but considering that we've required a document.body since 1.3 and haven't broken any pages, this doesn't appear to be a pressing issue. Used the test case written by dmethvin to verify the bug and the fix. Fixes #4320. 2009-11-09 13:47:53 +01:00
John Resig
24e18d4cae Backing out commit 81bfd9b870, read the ticket incorrectly - and seeing some of the other earlier tickets it's obvious that a more generic solution is needed. Thanks jdalton for the catch. 2009-11-09 13:30:33 +01:00
John Resig
4fd730dca7 Merge branch 'master' of git@github.com:jquery/jquery 2009-11-09 13:01:10 +01:00
lrbabe
d251809912 Making mouseenter and mouseleave work with .live(). 2009-11-09 12:59:54 +01:00
lrbabe
9a69b2cf08 Cleanup bubbling focus and blur events
- Use cached event instead of jQuery.event
- Do not cache event.special if you use it only once
2009-11-09 19:41:43 +08:00
rkatic
3dc5bc5a8b Make liveHandler to use jQuery.lastCloser and speed up internal sorting. 2009-11-08 00:37:05 +08:00
John Resig
81bfd9b870 Make sure that document.body exists, at least, in IE before the ready event is fired. Fixes #5443. 2009-11-07 16:00:43 +01:00
visionmedia
50cf4351a6 Consistant splits using " " instead of ","
This was used in several other areas, and IMO is easier to read
and since nothing is multi-word then we misewell use " "
2009-10-27 08:40:59 +08:00
John Resig
4b5a680f77 Fixed == change in ready. 2009-10-08 18:13:07 +00:00
Yehuda Katz
45dfa3b0fc Probably not the optimal solution, but tests pass. 2009-09-16 08:33:00 +00:00
Ariel Flesler
9ebb2fc654 jquery event: closes #5250. bind(), unbind() and one() support Object Literals (needs some refactor though) 2009-09-16 02:19:18 +00:00
Ariel Flesler
681f4fd3cd jquery event: misc removal 2009-09-14 22:58:20 +00:00
Ariel Flesler
bca8225413 jquery event: fixes #4989. blur and focus events now bubble and can be handled using live(). 2009-09-14 22:04:22 +00:00
Brandon Aaron
f3474c00cd fix for #5198, event memory leak limited to IE only via conditional compilation 2009-09-14 21:14:15 +00:00
John Resig
0a6c5205d2 Make sure that at least one argument is provided to .slice(), in accordance with the spec. Fixes jQuery bug #4942. 2009-07-23 13:22:55 +00:00
John Resig
6fc57be843 Support dynamically loaded copies of jQuery using document ready. Fixes #4889. 2009-07-22 15:03:23 +00:00
Brandon Aaron
ee34b6982a fix for #3533, triggering an event with a colon in the name on a table no longer throws an error in IE 2009-06-17 02:31:45 +00:00
Brandon Aaron
b763cc6602 fix regression in removing live events caused by r6324 2009-05-12 15:43:51 +00:00
Ariel Flesler
d075072768 jquery event: misc change 2009-05-10 14:38:35 +00:00
Brandon Aaron
09b59038a0 unused, left-over code from r6344 2009-05-07 18:09:17 +00:00
Brandon Aaron
811891785f .bind() now accepts an optional thisObject as the last argument which is used to change the value of this in event callbacks. fixes #3699 2009-05-07 00:50:28 +00:00
Brandon Aaron
8f042d8be3 fix for #4234. hover can take one function to use for both enter and leave. 2009-05-06 02:17:24 +00:00
Brandon Aaron
3a9c827bf8 fix for #3286 2009-05-06 01:24:22 +00:00
Brandon Aaron
cbda6c541b fix global event triggering that i broke in r6323 2009-05-01 00:59:27 +00:00
Brandon Aaron
96fd5f18d4 special event refactor left over code 2009-05-01 00:36:21 +00:00
Brandon Aaron
c6db93c373 fix for #2620 2009-05-01 00:21:29 +00:00
Brandon Aaron
a4b8fed8ad only copy guid from handler to modifiedHandler if it does not already have one 2009-05-01 00:02:51 +00:00
Brandon Aaron
aef1989ba7 live event handlers now receive data from trigger, fixes #4532, thanks nbubna 2009-04-30 21:50:15 +00:00
Brandon Aaron
71efbdd3b2 refactor specialAll into add and remove hooks for existing special events, live now accepts optional data param like bind, fixes #4612 and #4613, thanks to Mike Helgeson 2009-04-30 21:44:25 +00:00
Brandon Aaron
287ecdbf67 event clean up 2009-04-30 01:26:09 +00:00
Brandon Aaron
851846aabe .unbind() without any arguments now also unbinds namespaced events. fixes #4609 and #4241 2009-04-29 21:45:58 +00:00
Brandon Aaron
f5690995dd fix for #4268. bind now works with iframe windows. thanks tr4nslator 2009-04-22 04:18:53 +00:00