jQuery.fn.extend({everyTime:function(b,a,c,d,e){return this.each(function(){jQuery.timer.add(this,b,a,c,d,e)})},oneTime:function(b,a,c){return this.each(function(){jQuery.timer.add(this,b,a,c,1)})},stopTime:function(b,a){return this.each(function(){jQuery.timer.remove(this,b,a)})}});
jQuery.extend({timer:{guid:1,global:{},regex:/^([0-9]+)\s*(.*s)?$/,powers:{ms:1,cs:10,ds:100,s:1E3,das:1E4,hs:1E5,ks:1E6},timeParse:function(b){if(b==void 0||b==null)return null;var a=this.regex.exec(jQuery.trim(b.toString()));return a[2]?parseInt(a[1],10)*(this.powers[a[2]]||1):b},add:function(b,a,c,d,e,f){var g=0;jQuery.isFunction(c)&&(e||(e=d),d=c,c=a);a=jQuery.timer.timeParse(a);if(!(typeof a!="number"||isNaN(a)||a<=0)){e&&e.constructor!=Number&&(f=!!e,e=0);e=e||0;f=f||!1;if(!b.$timers)b.$timers=
{};b.$timers[c]||(b.$timers[c]={});d.$timerID=d.$timerID||this.guid++;var h=function(){if(!f||!this.inProgress)this.inProgress=!0,(++g>e&&e!==0||d.call(b,g)===!1)&&jQuery.timer.remove(b,c,d),this.inProgress=!1};h.$timerID=d.$timerID;b.$timers[c][d.$timerID]||(b.$timers[c][d.$timerID]=window.setInterval(h,a));this.global[c]||(this.global[c]=[]);this.global[c].push(b)}},remove:function(b,a,c){var d=b.$timers,e;if(d){if(a){if(d[a]){if(c)c.$timerID&&(window.clearInterval(d[a][c.$timerID]),delete d[a][c.$timerID]);
else for(c in d[a])window.clearInterval(d[a][c]),delete d[a][c];for(e in d[a])break;e||(e=null,delete d[a])}}else for(a in d)this.remove(b,a,c);for(e in d)break;if(!e)b.$timers=null}}}});if(jQuery.browser.msie)jQuery(window).one("unload",function(){var b=jQuery.timer.global,a;for(a in b)for(var c=b[a],d=c.length;--d;)jQuery.timer.remove(c[d],a)});

