!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["underscore","backbone"],b):"function"==typeof require&&"object"==typeof exports?module.exports=b(require("underscore"),require("backbone")):a.Backbone.Poller=b(a._,a.Backbone)}(this,function(a,b){"use strict";function c(b){return a.find(k,function(a){return a.model===b})}function d(c,d){this.model=c,this.cid=a.uniqueId("poller"),this.set(d),this.model instanceof b.Model&&this.listenTo(this.model,"destroy",this.destroy)}function e(b){if(h(b)){var c=a.extend({},b.options,{success:function(a,c){b.trigger("success",a,c),g(b)},error:function(a,c){b.options.continueOnError?(b.trigger("error",a,c),g(b)):(b.stop({silent:!0}),b.trigger("error",a,c))}});b.trigger("fetch",b.model),b.xhr=b.model.fetch(c)}}function f(b){if(a.isNumber(b.options.delay))return b.options.delay;var c=b.options.delay[0],d=b.options.delay[1],e=b.options.delay[2]||2;m[b.cid]?a.isFunction(e)?m[b.cid]=e(m[b.cid]):m[b.cid]*=e:m[b.cid]=1;var f=Math.round(c*m[b.cid]);return d&&d>0&&(f=Math.min(f,d)),f}function g(b,c){h(b)&&(b.timeoutId=a.delay(e,c||f(b),b))}function h(a){return!!a.options.active&&(!0===a.options.condition(a.model)||(a.stop({silent:!0}),a.trigger("complete",a.model),!1))}var i={delay:1e3,condition:function(){return!0}},j=["start","stop","fetch","success","error","complete"],k=[],l={get:function(a,b){var e=c(a);return e?e.set(b):(e=new d(a,b),k.push(e)),b&&!0===b.autostart&&e.start({silent:!0}),e},size:function(){return k.length},reset:function(){for(;k.length;)k[0].destroy()}};a.extend(d.prototype,b.Events,{set:function(b){return this.options=a.extend({},i,b||{}),this.options.flush&&this.off(),a.each(j,a.bind(function(b){var c=this.options[b];a.isFunction(c)&&(this.off(b,c,this),this.on(b,c,this))},this)),this.stop({silent:!0})},start:function(b){return this.active()||(b&&b.silent||this.trigger("start",this.model),this.options.active=!0,this.options.delayed?g(this,a.isNumber(this.options.delayed)&&this.options.delayed):e(this)),this},stop:function(a){return a&&a.silent||this.trigger("stop",this.model),this.options.active=!1,this.xhr&&this.xhr.abort&&this.xhr.abort(),this.xhr=null,clearTimeout(this.timeoutId),this.timeoutId=null,this},active:function(){return!0===this.options.active},destroy:function(){var b=a.indexOf(k,this);b>-1&&(this.stop().stopListening().off(),k.splice(b,1))}});var m={};return l.getDelay=f,l.prototype=d.prototype,l});