summaryrefslogtreecommitdiffstatshomepage
path: root/wp-includes/js/jquery/jquery.schedule.js
diff options
context:
space:
mode:
authorRyan Boren <ryan@git.wordpress.org>2008-01-10 17:35:48 +0000
committerRyan Boren <ryan@git.wordpress.org>2008-01-10 17:35:48 +0000
commit2bc93b77a09d18b0fa9688b89d1815ae441ef6ee (patch)
treee9f4e3d645dac7f6d1342efd093692e585dba978 /wp-includes/js/jquery/jquery.schedule.js
parente273c34966892537fdc055f4ab9662cb8954e5b1 (diff)
downloadwordpress-2bc93b77a09d18b0fa9688b89d1815ae441ef6ee.tar.gz
wordpress-2bc93b77a09d18b0fa9688b89d1815ae441ef6ee.zip
Eliminate duplication in and minify jquery.schedule.js. fixes #5620
git-svn-id: https://develop.svn.wordpress.org/trunk@6590 602fd350-edb4-49c9-b593-d223f7449a82
Diffstat (limited to 'wp-includes/js/jquery/jquery.schedule.js')
-rw-r--r--wp-includes/js/jquery/jquery.schedule.js742
1 files changed, 35 insertions, 707 deletions
diff --git a/wp-includes/js/jquery/jquery.schedule.js b/wp-includes/js/jquery/jquery.schedule.js
index 7b37e5928b..f00e7b39e5 100644
--- a/wp-includes/js/jquery/jquery.schedule.js
+++ b/wp-includes/js/jquery/jquery.schedule.js
@@ -1,708 +1,36 @@
-/*
-** jquery.schedule.js -- jQuery plugin for scheduled/deferred actions
-** Copyright (c) 2007 Ralf S. Engelschall <rse@engelschall.com>
-** Licensed under GPL <http://www.gnu.org/licenses/gpl.txt>
-**
-** $LastChangedDate$
-** $LastChangedRevision$
-*/
-
-/*
- * <div id="button">TEST BUTTON</div>
- * <div id="test"></div>
- *
- * <script type="text/javascript">
- * $(document).ready(
- * function(){
- * $('#button').click(function () {
- * $(this).css("color", "blue").schedule(2000, function (x) {
- * $(this).css("color", "red");
- * $("#test").html("test: x = " + x);
- * }, 42);
- * });
- * });
- * </script>
- */
-
-(function($) {
-
- /* object constructor */
- $.scheduler = function () {
- this.bucket = {};
- return;
- };
-
- /* object methods */
- $.scheduler.prototype = {
- /* schedule a task */
- schedule: function () {
- /* schedule context with default parameters */
- var ctx = {
- "id": null, /* unique identifier of high-level schedule */
- "time": 1000, /* time in milliseconds after which the task is run */
- "repeat": false, /* whether schedule should be automatically repeated */
- "protect": false, /* whether schedule should be protected from double scheduling */
- "obj": null, /* function context object ("this") */
- "func": function(){}, /* function to call */
- "args": [] /* function arguments to pass */
- };
-
- /* helper function: portable checking whether something is a function */
- function _isfn (fn) {
- return (
- !!fn
- && typeof fn != "string"
- && typeof fn[0] == "undefined"
- && RegExp("function", "i").test(fn + "")
- );
- };
-
- /* parse arguments into context parameters (part 1/4):
- detect an override object (special case to support jQuery method) */
- var i = 0;
- var override = false;
- if (typeof arguments[i] == "object" && arguments.length > 1) {
- override = true;
- i++;
- }
-
- /* parse arguments into context parameters (part 2/4):
- support the flexible way of an associated array */
- if (typeof arguments[i] == "object") {
- for (var option in arguments[i])
- if (typeof ctx[option] != "undefined")
- ctx[option] = arguments[i][option];
- i++;
- }
-
- /* parse arguments into context parameters (part 3/4):
- support: schedule([time [, repeat], ]{{obj, methodname} | func}[, arg, ...]); */
- if ( typeof arguments[i] == "number"
- || ( typeof arguments[i] == "string"
- && arguments[i].match(RegExp("^[0-9]+[smhdw]$"))))
- ctx["time"] = arguments[i++];
- if (typeof arguments[i] == "boolean")
- ctx["repeat"] = arguments[i++];
- if (typeof arguments[i] == "boolean")
- ctx["protect"] = arguments[i++];
- if ( typeof arguments[i] == "object"
- && typeof arguments[i+1] == "string"
- && _isfn(arguments[i][arguments[i+1]])) {
- ctx["obj"] = arguments[i++];
- ctx["func"] = arguments[i++];
- }
- else if ( typeof arguments[i] != "undefined"
- && ( _isfn(arguments[i])
- || typeof arguments[i] == "string"))
- ctx["func"] = arguments[i++];
- while (typeof arguments[i] != "undefined")
- ctx["args"].push(arguments[i++]);
-
- /* parse arguments into context parameters (part 4/4):
- apply parameters from override object */
- if (override) {
- if (typeof arguments[1] == "object") {
- for (var option in arguments[0])
- if ( typeof ctx[option] != "undefined"
- && typeof arguments[1][option] == "undefined")
- ctx[option] = arguments[0][option];
- }
- else {
- for (var option in arguments[0])
- if (typeof ctx[option] != "undefined")
- ctx[option] = arguments[0][option];
- }
- i++;
- }
-
- /* annotate context with internals */
- ctx["_scheduler"] = this; /* internal: back-reference to scheduler object */
- ctx["_handle"] = null; /* internal: unique handle of low-level task */
-
- /* determine time value in milliseconds */
- var match = String(ctx["time"]).match(RegExp("^([0-9]+)([smhdw])$"));
- if (match && match[0] != "undefined" && match[1] != "undefined")
- ctx["time"] = String(parseInt(match[1]) *
- { s: 1000, m: 1000*60, h: 1000*60*60,
- d: 1000*60*60*24, w: 1000*60*60*24*7 }[match[2]]);
-
- /* determine unique identifier of task */
- if (ctx["id"] == null)
- ctx["id"] = ( String(ctx["repeat"]) + ":"
- + String(ctx["protect"]) + ":"
- + String(ctx["time"]) + ":"
- + String(ctx["obj"]) + ":"
- + String(ctx["func"]) + ":"
- + String(ctx["args"]) );
-
- /* optionally protect from duplicate calls */
- if (ctx["protect"])
- if (typeof this.bucket[ctx["id"]] != "undefined")
- return this.bucket[ctx["id"]];
-
- /* support execution of methods by name and arbitrary scripts */
- if (!_isfn(ctx["func"])) {
- if ( ctx["obj"] != null
- && typeof ctx["obj"] == "object"
- && typeof ctx["func"] == "string"
- && _isfn(ctx["obj"][ctx["func"]]))
- /* method by name */
- ctx["func"] = ctx["obj"][ctx["func"]];
- else
- /* arbitrary script */
- ctx["func"] = eval("function () { " + ctx["func"] + " }");
- }
-
- /* pass-through to internal scheduling operation */
- ctx["_handle"] = this._schedule(ctx);
-
- /* store context into bucket of scheduler object */
- this.bucket[ctx["id"]] = ctx;
-
- /* return context */
- return ctx;
- },
-
- /* re-schedule a task */
- reschedule: function (ctx) {
- if (typeof ctx == "string")
- ctx = this.bucket[ctx];
-
- /* pass-through to internal scheduling operation */
- ctx["_handle"] = this._schedule(ctx);
-
- /* return context */
- return ctx;
- },
-
- /* internal scheduling operation */
- _schedule: function (ctx) {
- /* closure to act as the call trampoline function */
- var trampoline = function () {
- /* jump into function */
- var obj = (ctx["obj"] != null ? ctx["obj"] : ctx);
- (ctx["func"]).apply(obj, ctx["args"]);
-
- /* either repeat scheduling and keep in bucket or
- just stop scheduling and delete from scheduler bucket */
- if ( /* not cancelled from inside... */
- typeof (ctx["_scheduler"]).bucket[ctx["id"]] != "undefined"
- && /* ...and repeating requested */
- ctx["repeat"])
- (ctx["_scheduler"])._schedule(ctx);
- else
- delete (ctx["_scheduler"]).bucket[ctx["id"]];
- };
-
- /* schedule task and return handle */
- return setTimeout(trampoline, ctx["time"]);
- },
-
- /* cancel a scheduled task */
- cancel: function (ctx) {
- if (typeof ctx == "string")
- ctx = this.bucket[ctx];
-
- /* cancel scheduled task */
- if (typeof ctx == "object") {
- clearTimeout(ctx["_handle"]);
- delete this.bucket[ctx["id"]];
- }
- }
- };
-
- /* integrate a global instance of the scheduler into the global jQuery object */
- $.extend({
- scheduler$: new $.scheduler(),
- schedule: function () { return $.scheduler$.schedule.apply ($.scheduler$, arguments) },
- reschedule: function () { return $.scheduler$.reschedule.apply($.scheduler$, arguments) },
- cancel: function () { return $.scheduler$.cancel.apply ($.scheduler$, arguments) }
- });
-
- /* integrate scheduling convinience method into all jQuery objects */
- $.fn.extend({
- schedule: function () {
- var a = [ {} ];
- for (var i = 0; i < arguments.length; i++)
- a.push(arguments[i]);
- return this.each(function () {
- a[0] = { "id": this, "obj": this };
- return $.schedule.apply($, a);
- });
- }
- });
-
-})(jQuery);
-
-/*
-** jquery.schedule.js -- jQuery plugin for scheduled/deferred actions
-** Copyright (c) 2007 Ralf S. Engelschall <rse@engelschall.com>
-** Licensed under GPL <http://www.gnu.org/licenses/gpl.txt>
-**
-** $LastChangedDate$
-** $LastChangedRevision$
-*/
-
-/*
- * <div id="button">TEST BUTTON</div>
- * <div id="test"></div>
- *
- * <script type="text/javascript">
- * $(document).ready(
- * function(){
- * $('#button').click(function () {
- * $(this).css("color", "blue").schedule(2000, function (x) {
- * $(this).css("color", "red");
- * $("#test").html("test: x = " + x);
- * }, 42);
- * });
- * });
- * </script>
- */
-
-(function($) {
-
- /* object constructor */
- $.scheduler = function () {
- this.bucket = {};
- return;
- };
-
- /* object methods */
- $.scheduler.prototype = {
- /* schedule a task */
- schedule: function () {
- /* schedule context with default parameters */
- var ctx = {
- "id": null, /* unique identifier of high-level schedule */
- "time": 1000, /* time in milliseconds after which the task is run */
- "repeat": false, /* whether schedule should be automatically repeated */
- "protect": false, /* whether schedule should be protected from double scheduling */
- "obj": null, /* function context object ("this") */
- "func": function(){}, /* function to call */
- "args": [] /* function arguments to pass */
- };
-
- /* helper function: portable checking whether something is a function */
- function _isfn (fn) {
- return (
- !!fn
- && typeof fn != "string"
- && typeof fn[0] == "undefined"
- && RegExp("function", "i").test(fn + "")
- );
- };
-
- /* parse arguments into context parameters (part 1/4):
- detect an override object (special case to support jQuery method) */
- var i = 0;
- var override = false;
- if (typeof arguments[i] == "object" && arguments.length > 1) {
- override = true;
- i++;
- }
-
- /* parse arguments into context parameters (part 2/4):
- support the flexible way of an associated array */
- if (typeof arguments[i] == "object") {
- for (var option in arguments[i])
- if (typeof ctx[option] != "undefined")
- ctx[option] = arguments[i][option];
- i++;
- }
-
- /* parse arguments into context parameters (part 3/4):
- support: schedule([time [, repeat], ]{{obj, methodname} | func}[, arg, ...]); */
- if ( typeof arguments[i] == "number"
- || ( typeof arguments[i] == "string"
- && arguments[i].match(RegExp("^[0-9]+[smhdw]$"))))
- ctx["time"] = arguments[i++];
- if (typeof arguments[i] == "boolean")
- ctx["repeat"] = arguments[i++];
- if (typeof arguments[i] == "boolean")
- ctx["protect"] = arguments[i++];
- if ( typeof arguments[i] == "object"
- && typeof arguments[i+1] == "string"
- && _isfn(arguments[i][arguments[i+1]])) {
- ctx["obj"] = arguments[i++];
- ctx["func"] = arguments[i++];
- }
- else if ( typeof arguments[i] != "undefined"
- && ( _isfn(arguments[i])
- || typeof arguments[i] == "string"))
- ctx["func"] = arguments[i++];
- while (typeof arguments[i] != "undefined")
- ctx["args"].push(arguments[i++]);
-
- /* parse arguments into context parameters (part 4/4):
- apply parameters from override object */
- if (override) {
- if (typeof arguments[1] == "object") {
- for (var option in arguments[0])
- if ( typeof ctx[option] != "undefined"
- && typeof arguments[1][option] == "undefined")
- ctx[option] = arguments[0][option];
- }
- else {
- for (var option in arguments[0])
- if (typeof ctx[option] != "undefined")
- ctx[option] = arguments[0][option];
- }
- i++;
- }
-
- /* annotate context with internals */
- ctx["_scheduler"] = this; /* internal: back-reference to scheduler object */
- ctx["_handle"] = null; /* internal: unique handle of low-level task */
-
- /* determine time value in milliseconds */
- var match = String(ctx["time"]).match(RegExp("^([0-9]+)([smhdw])$"));
- if (match && match[0] != "undefined" && match[1] != "undefined")
- ctx["time"] = String(parseInt(match[1]) *
- { s: 1000, m: 1000*60, h: 1000*60*60,
- d: 1000*60*60*24, w: 1000*60*60*24*7 }[match[2]]);
-
- /* determine unique identifier of task */
- if (ctx["id"] == null)
- ctx["id"] = ( String(ctx["repeat"]) + ":"
- + String(ctx["protect"]) + ":"
- + String(ctx["time"]) + ":"
- + String(ctx["obj"]) + ":"
- + String(ctx["func"]) + ":"
- + String(ctx["args"]) );
-
- /* optionally protect from duplicate calls */
- if (ctx["protect"])
- if (typeof this.bucket[ctx["id"]] != "undefined")
- return this.bucket[ctx["id"]];
-
- /* support execution of methods by name and arbitrary scripts */
- if (!_isfn(ctx["func"])) {
- if ( ctx["obj"] != null
- && typeof ctx["obj"] == "object"
- && typeof ctx["func"] == "string"
- && _isfn(ctx["obj"][ctx["func"]]))
- /* method by name */
- ctx["func"] = ctx["obj"][ctx["func"]];
- else
- /* arbitrary script */
- ctx["func"] = eval("function () { " + ctx["func"] + " }");
- }
-
- /* pass-through to internal scheduling operation */
- ctx["_handle"] = this._schedule(ctx);
-
- /* store context into bucket of scheduler object */
- this.bucket[ctx["id"]] = ctx;
-
- /* return context */
- return ctx;
- },
-
- /* re-schedule a task */
- reschedule: function (ctx) {
- if (typeof ctx == "string")
- ctx = this.bucket[ctx];
-
- /* pass-through to internal scheduling operation */
- ctx["_handle"] = this._schedule(ctx);
-
- /* return context */
- return ctx;
- },
-
- /* internal scheduling operation */
- _schedule: function (ctx) {
- /* closure to act as the call trampoline function */
- var trampoline = function () {
- /* jump into function */
- var obj = (ctx["obj"] != null ? ctx["obj"] : ctx);
- (ctx["func"]).apply(obj, ctx["args"]);
-
- /* either repeat scheduling and keep in bucket or
- just stop scheduling and delete from scheduler bucket */
- if ( /* not cancelled from inside... */
- typeof (ctx["_scheduler"]).bucket[ctx["id"]] != "undefined"
- && /* ...and repeating requested */
- ctx["repeat"])
- (ctx["_scheduler"])._schedule(ctx);
- else
- delete (ctx["_scheduler"]).bucket[ctx["id"]];
- };
-
- /* schedule task and return handle */
- return setTimeout(trampoline, ctx["time"]);
- },
-
- /* cancel a scheduled task */
- cancel: function (ctx) {
- if (typeof ctx == "string")
- ctx = this.bucket[ctx];
-
- /* cancel scheduled task */
- if (typeof ctx == "object") {
- clearTimeout(ctx["_handle"]);
- delete this.bucket[ctx["id"]];
- }
- }
- };
-
- /* integrate a global instance of the scheduler into the global jQuery object */
- $.extend({
- scheduler$: new $.scheduler(),
- schedule: function () { return $.scheduler$.schedule.apply ($.scheduler$, arguments) },
- reschedule: function () { return $.scheduler$.reschedule.apply($.scheduler$, arguments) },
- cancel: function () { return $.scheduler$.cancel.apply ($.scheduler$, arguments) }
- });
-
- /* integrate scheduling convinience method into all jQuery objects */
- $.fn.extend({
- schedule: function () {
- var a = [ {} ];
- for (var i = 0; i < arguments.length; i++)
- a.push(arguments[i]);
- return this.each(function () {
- a[0] = { "id": this, "obj": this };
- return $.schedule.apply($, a);
- });
- }
- });
-
-})(jQuery);
-
-/*
-** jquery.schedule.js -- jQuery plugin for scheduled/deferred actions
-** Copyright (c) 2007 Ralf S. Engelschall <rse@engelschall.com>
-** Licensed under GPL <http://www.gnu.org/licenses/gpl.txt>
-**
-** $LastChangedDate$
-** $LastChangedRevision$
-*/
-
-/*
- * <div id="button">TEST BUTTON</div>
- * <div id="test"></div>
- *
- * <script type="text/javascript">
- * $(document).ready(
- * function(){
- * $('#button').click(function () {
- * $(this).css("color", "blue").schedule(2000, function (x) {
- * $(this).css("color", "red");
- * $("#test").html("test: x = " + x);
- * }, 42);
- * });
- * });
- * </script>
- */
-
-(function($) {
-
- /* object constructor */
- $.scheduler = function () {
- this.bucket = {};
- return;
- };
-
- /* object methods */
- $.scheduler.prototype = {
- /* schedule a task */
- schedule: function () {
- /* schedule context with default parameters */
- var ctx = {
- "id": null, /* unique identifier of high-level schedule */
- "time": 1000, /* time in milliseconds after which the task is run */
- "repeat": false, /* whether schedule should be automatically repeated */
- "protect": false, /* whether schedule should be protected from double scheduling */
- "obj": null, /* function context object ("this") */
- "func": function(){}, /* function to call */
- "args": [] /* function arguments to pass */
- };
-
- /* helper function: portable checking whether something is a function */
- function _isfn (fn) {
- return (
- !!fn
- && typeof fn != "string"
- && typeof fn[0] == "undefined"
- && RegExp("function", "i").test(fn + "")
- );
- };
-
- /* parse arguments into context parameters (part 1/4):
- detect an override object (special case to support jQuery method) */
- var i = 0;
- var override = false;
- if (typeof arguments[i] == "object" && arguments.length > 1) {
- override = true;
- i++;
- }
-
- /* parse arguments into context parameters (part 2/4):
- support the flexible way of an associated array */
- if (typeof arguments[i] == "object") {
- for (var option in arguments[i])
- if (typeof ctx[option] != "undefined")
- ctx[option] = arguments[i][option];
- i++;
- }
-
- /* parse arguments into context parameters (part 3/4):
- support: schedule([time [, repeat], ]{{obj, methodname} | func}[, arg, ...]); */
- if ( typeof arguments[i] == "number"
- || ( typeof arguments[i] == "string"
- && arguments[i].match(RegExp("^[0-9]+[smhdw]$"))))
- ctx["time"] = arguments[i++];
- if (typeof arguments[i] == "boolean")
- ctx["repeat"] = arguments[i++];
- if (typeof arguments[i] == "boolean")
- ctx["protect"] = arguments[i++];
- if ( typeof arguments[i] == "object"
- && typeof arguments[i+1] == "string"
- && _isfn(arguments[i][arguments[i+1]])) {
- ctx["obj"] = arguments[i++];
- ctx["func"] = arguments[i++];
- }
- else if ( typeof arguments[i] != "undefined"
- && ( _isfn(arguments[i])
- || typeof arguments[i] == "string"))
- ctx["func"] = arguments[i++];
- while (typeof arguments[i] != "undefined")
- ctx["args"].push(arguments[i++]);
-
- /* parse arguments into context parameters (part 4/4):
- apply parameters from override object */
- if (override) {
- if (typeof arguments[1] == "object") {
- for (var option in arguments[0])
- if ( typeof ctx[option] != "undefined"
- && typeof arguments[1][option] == "undefined")
- ctx[option] = arguments[0][option];
- }
- else {
- for (var option in arguments[0])
- if (typeof ctx[option] != "undefined")
- ctx[option] = arguments[0][option];
- }
- i++;
- }
-
- /* annotate context with internals */
- ctx["_scheduler"] = this; /* internal: back-reference to scheduler object */
- ctx["_handle"] = null; /* internal: unique handle of low-level task */
-
- /* determine time value in milliseconds */
- var match = String(ctx["time"]).match(RegExp("^([0-9]+)([smhdw])$"));
- if (match && match[0] != "undefined" && match[1] != "undefined")
- ctx["time"] = String(parseInt(match[1]) *
- { s: 1000, m: 1000*60, h: 1000*60*60,
- d: 1000*60*60*24, w: 1000*60*60*24*7 }[match[2]]);
-
- /* determine unique identifier of task */
- if (ctx["id"] == null)
- ctx["id"] = ( String(ctx["repeat"]) + ":"
- + String(ctx["protect"]) + ":"
- + String(ctx["time"]) + ":"
- + String(ctx["obj"]) + ":"
- + String(ctx["func"]) + ":"
- + String(ctx["args"]) );
-
- /* optionally protect from duplicate calls */
- if (ctx["protect"])
- if (typeof this.bucket[ctx["id"]] != "undefined")
- return this.bucket[ctx["id"]];
-
- /* support execution of methods by name and arbitrary scripts */
- if (!_isfn(ctx["func"])) {
- if ( ctx["obj"] != null
- && typeof ctx["obj"] == "object"
- && typeof ctx["func"] == "string"
- && _isfn(ctx["obj"][ctx["func"]]))
- /* method by name */
- ctx["func"] = ctx["obj"][ctx["func"]];
- else
- /* arbitrary script */
- ctx["func"] = eval("function () { " + ctx["func"] + " }");
- }
-
- /* pass-through to internal scheduling operation */
- ctx["_handle"] = this._schedule(ctx);
-
- /* store context into bucket of scheduler object */
- this.bucket[ctx["id"]] = ctx;
-
- /* return context */
- return ctx;
- },
-
- /* re-schedule a task */
- reschedule: function (ctx) {
- if (typeof ctx == "string")
- ctx = this.bucket[ctx];
-
- /* pass-through to internal scheduling operation */
- ctx["_handle"] = this._schedule(ctx);
-
- /* return context */
- return ctx;
- },
-
- /* internal scheduling operation */
- _schedule: function (ctx) {
- /* closure to act as the call trampoline function */
- var trampoline = function () {
- /* jump into function */
- var obj = (ctx["obj"] != null ? ctx["obj"] : ctx);
- (ctx["func"]).apply(obj, ctx["args"]);
-
- /* either repeat scheduling and keep in bucket or
- just stop scheduling and delete from scheduler bucket */
- if ( /* not cancelled from inside... */
- typeof (ctx["_scheduler"]).bucket[ctx["id"]] != "undefined"
- && /* ...and repeating requested */
- ctx["repeat"])
- (ctx["_scheduler"])._schedule(ctx);
- else
- delete (ctx["_scheduler"]).bucket[ctx["id"]];
- };
-
- /* schedule task and return handle */
- return setTimeout(trampoline, ctx["time"]);
- },
-
- /* cancel a scheduled task */
- cancel: function (ctx) {
- if (typeof ctx == "string")
- ctx = this.bucket[ctx];
-
- /* cancel scheduled task */
- if (typeof ctx == "object") {
- clearTimeout(ctx["_handle"]);
- delete this.bucket[ctx["id"]];
- }
- }
- };
-
- /* integrate a global instance of the scheduler into the global jQuery object */
- $.extend({
- scheduler$: new $.scheduler(),
- schedule: function () { return $.scheduler$.schedule.apply ($.scheduler$, arguments) },
- reschedule: function () { return $.scheduler$.reschedule.apply($.scheduler$, arguments) },
- cancel: function () { return $.scheduler$.cancel.apply ($.scheduler$, arguments) }
- });
-
- /* integrate scheduling convinience method into all jQuery objects */
- $.fn.extend({
- schedule: function () {
- var a = [ {} ];
- for (var i = 0; i < arguments.length; i++)
- a.push(arguments[i]);
- return this.each(function () {
- a[0] = { "id": this, "obj": this };
- return $.schedule.apply($, a);
- });
- }
- });
-
-})(jQuery);
+(function($){$.scheduler=function(){this.bucket={};return;};$.scheduler.prototype={schedule:function(){var ctx={"id":null,"time":1000,"repeat":false,"protect":false,"obj":null,"func":function(){},"args":[]};function _isfn(fn){return(!!fn&&typeof fn!="string"&&typeof fn[0]=="undefined"&&RegExp("function","i").test(fn+""));};var i=0;var override=false;if(typeof arguments[i]=="object"&&arguments.length>1){override=true;i++;}
+if(typeof arguments[i]=="object"){for(var option in arguments[i])
+if(typeof ctx[option]!="undefined")
+ctx[option]=arguments[i][option];i++;}
+if(typeof arguments[i]=="number"||(typeof arguments[i]=="string"&&arguments[i].match(RegExp("^[0-9]+[smhdw]$"))))
+ctx["time"]=arguments[i++];if(typeof arguments[i]=="boolean")
+ctx["repeat"]=arguments[i++];if(typeof arguments[i]=="boolean")
+ctx["protect"]=arguments[i++];if(typeof arguments[i]=="object"&&typeof arguments[i+1]=="string"&&_isfn(arguments[i][arguments[i+1]])){ctx["obj"]=arguments[i++];ctx["func"]=arguments[i++];}
+else if(typeof arguments[i]!="undefined"&&(_isfn(arguments[i])||typeof arguments[i]=="string"))
+ctx["func"]=arguments[i++];while(typeof arguments[i]!="undefined")
+ctx["args"].push(arguments[i++]);if(override){if(typeof arguments[1]=="object"){for(var option in arguments[0])
+if(typeof ctx[option]!="undefined"&&typeof arguments[1][option]=="undefined")
+ctx[option]=arguments[0][option];}
+else{for(var option in arguments[0])
+if(typeof ctx[option]!="undefined")
+ctx[option]=arguments[0][option];}
+i++;}
+ctx["_scheduler"]=this;ctx["_handle"]=null;var match=String(ctx["time"]).match(RegExp("^([0-9]+)([smhdw])$"));if(match&&match[0]!="undefined"&&match[1]!="undefined")
+ctx["time"]=String(parseInt(match[1])*{s:1000,m:1000*60,h:1000*60*60,d:1000*60*60*24,w:1000*60*60*24*7}[match[2]]);if(ctx["id"]==null)
+ctx["id"]=(String(ctx["repeat"])+":"
++String(ctx["protect"])+":"
++String(ctx["time"])+":"
++String(ctx["obj"])+":"
++String(ctx["func"])+":"
++String(ctx["args"]));if(ctx["protect"])
+if(typeof this.bucket[ctx["id"]]!="undefined")
+return this.bucket[ctx["id"]];if(!_isfn(ctx["func"])){if(ctx["obj"]!=null&&typeof ctx["obj"]=="object"&&typeof ctx["func"]=="string"&&_isfn(ctx["obj"][ctx["func"]]))
+ctx["func"]=ctx["obj"][ctx["func"]];else
+ctx["func"]=eval("function () { "+ctx["func"]+" }");}
+ctx["_handle"]=this._schedule(ctx);this.bucket[ctx["id"]]=ctx;return ctx;},reschedule:function(ctx){if(typeof ctx=="string")
+ctx=this.bucket[ctx];ctx["_handle"]=this._schedule(ctx);return ctx;},_schedule:function(ctx){var trampoline=function(){var obj=(ctx["obj"]!=null?ctx["obj"]:ctx);(ctx["func"]).apply(obj,ctx["args"]);if(typeof(ctx["_scheduler"]).bucket[ctx["id"]]!="undefined"&&ctx["repeat"])
+(ctx["_scheduler"])._schedule(ctx);else
+delete(ctx["_scheduler"]).bucket[ctx["id"]];};return setTimeout(trampoline,ctx["time"]);},cancel:function(ctx){if(typeof ctx=="string")
+ctx=this.bucket[ctx];if(typeof ctx=="object"){clearTimeout(ctx["_handle"]);delete this.bucket[ctx["id"]];}}};$.extend({scheduler$:new $.scheduler(),schedule:function(){return $.scheduler$.schedule.apply($.scheduler$,arguments)},reschedule:function(){return $.scheduler$.reschedule.apply($.scheduler$,arguments)},cancel:function(){return $.scheduler$.cancel.apply($.scheduler$,arguments)}});$.fn.extend({schedule:function(){var a=[{}];for(var i=0;i<arguments.length;i++)
+a.push(arguments[i]);return this.each(function(){a[0]={"id":this,"obj":this};return $.schedule.apply($,a);});}});})(jQuery); \ No newline at end of file