modules.define('functions__throttle', function(provide) {

provide(function(fn, timeout, ctx) {
    var timer, args, needInvoke;
    return function() {
        args = arguments;
        needInvoke = true;
        ctx || (ctx = this);

        if(!timer) {
            var wrapperFn = function() {
                    if(needInvoke) {
                        fn.apply(ctx, args);
                        needInvoke = false;
                        timer = setTimeout(wrapperFn, timeout);
                    }
                    else {
                        timer = null;
                    }
                };
            wrapperFn();
        }
    };
});

});
@@ -81,16 +81,28 @@
 timeout,
+ invokeAsap,
  ctx) %7B%0A
@@ -114,31 +114,561 @@
 ar t
-imer, args, needInvoke;
+ypeofInvokeAsap = typeof invokeAsap;%0A    if(typeofInvokeAsap === 'undefined') %7B%0A        invokeAsap = true;%0A    %7D%0A    else if(arguments.length === 3 && typeofInvokeAsap !== 'boolean') %7B%0A        ctx = invokeAsap;%0A        invokeAsap = true;%0A    %7D%0A%0A    var timer, args, needInvoke,%0A        wrapper = function() %7B%0A            if(needInvoke) %7B%0A                fn.apply(ctx, args);%0A                needInvoke = false;%0A                timer = setTimeout(wrapper, timeout);%0A            %7D%0A            else %7B%0A                timer = null;%0A            %7D%0A        %7D;%0A
 %0A   
@@ -718,35 +718,8 @@
 ts;%0A
-        needInvoke = true;%0A
     
@@ -743,25 +743,24 @@
  this);%0A
-%0A
         
 if(!time
@@ -755,193 +755,101 @@
     
-if(!timer) %7B%0A            var wrapperFn = function() %7B%0A                    if(needInvoke) %7B%0A                        fn.apply(ctx, args);%0A                        needInvoke = false;%0A     
+needInvoke = true;%0A%0A        if(!timer) %7B%0A            invokeAsap?%0A                wrapper() :%0A
     
@@ -852,35 +852,32 @@
                 
-   
 timer = setTimeo
@@ -886,18 +886,16 @@
 (wrapper
-Fn
 , timeou
@@ -902,161 +902,8 @@
 t);%0A
-                    %7D%0A                    else %7B%0A                        timer = null;%0A                    %7D%0A                %7D;%0A            wrapperFn();%0A
     

add Asap param