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