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