﻿ jQuery.periodic = function (callback, options) {
      callback = callback || (function() { return false; });

      options = jQuery.extend({ },
                              { frequency : 10,
                                allowParallelExecution : false},
                                options);
      var currentlyExecuting = false;
      var timer;

      var controller = {
         stop : function () {
           if (timer) {
             window.clearInterval(timer);
             timer = null;
           }
         },
         currentlyExecuting : false,
         currentlyExecutingAsync : false
      };

      timer = window.setInterval(function() {
         if (options.allowParallelExecution || !(controller.currentlyExecuting || controller.currentlyExecutingAsync)) {
            try {
                 controller.currentlyExecuting = true;
                 if (!(callback(controller))) {  controller.stop();  }
            } finally {
              controller.currentlyExecuting = false;
            }
   	  }
}, options.frequency * 1000); 