//
// INTEL CONFIDENTIAL
//
// Copyright 2013 Intel Corporation All Rights Reserved.
//
// The source code contained or described herein and all documents related
// to the source code ("Material") are owned by Intel Corporation or its
// suppliers or licensors. Title to the Material remains with Intel Corporation
// or its suppliers and licensors. The Material contains trade secrets and
// proprietary and confidential information of Intel or its suppliers and
// licensors. The Material is protected by worldwide copyright and trade secret
// laws and treaty provisions. No part of the Material may be used, copied,
// reproduced, modified, published, uploaded, posted, transmitted, distributed,
// or disclosed in any way without Intel's prior express written permission.
//
// No license under any patent, copyright, trade secret or other intellectual
// property right is granted to or conferred upon you by disclosure or delivery
// of the Materials, either expressly, by implication, inducement, estoppel or
// otherwise. Any license under such intellectual property rights must be
// express and approved by Intel in writing.

(function () {
  'use strict';

  var vendors = ['webkit', 'moz'];

  angular.module('requestAnimationFrame')
    .factory('requestAnimationFrame', ['$window', function ($window) {
      var requestAnimationFrame = $window.requestAnimationFrame;
      var lastTime = 0;

      for(var x = 0; x < vendors.length && !requestAnimationFrame; x += 1)
        requestAnimationFrame = $window[vendors[x]+'RequestAnimationFrame'];

      if (!requestAnimationFrame)
        requestAnimationFrame = function(callback) {
          var currTime = new Date().getTime();
          var timeToCall = Math.max(0, 16 - (currTime - lastTime));
          var id = $window.setTimeout(function() { callback(currTime + timeToCall); },
            timeToCall);
          lastTime = currTime + timeToCall;
          return id;
        };

      return requestAnimationFrame.bind($window);
    }])
    .factory('cancelAnimationFrame', ['$window', function ($window) {
      var cancelAnimationFrame = $window.cancelAnimationFrame;

      for (var x = 0; x < vendors.length && !cancelAnimationFrame; x += 1) {
        cancelAnimationFrame =
          $window[vendors[x]+'CancelAnimationFrame'] || $window[vendors[x]+'CancelRequestAnimationFrame'];
      }

      if (!cancelAnimationFrame)
        cancelAnimationFrame = function(id) {
          $window.clearTimeout(id);
        };

      return cancelAnimationFrame.bind($window);
    }])
    .factory('raf', ['requestAnimationFrame', 'cancelAnimationFrame',
      function (requestAnimationFrame, cancelAnimationFrame) {
        return {
          requestAnimationFrame: requestAnimationFrame,
          cancelAnimationFrame: cancelAnimationFrame
        };
      }
    ]);
}());


@@ -1412,85 +1412,87 @@
     
-for(var x = 0; x %3C vendors.length && !requestAnimationFrame; x += 1)%0A
+if (!requestAnimationFrame)%0A        vendors.some(function (vendor) %7B%0A  
         
 requ
@@ -1479,32 +1479,40 @@
 or) %7B%0A          
+return (
 requestAnimation
@@ -1533,21 +1533,19 @@
 w%5Bvendor
-s%5Bx%5D+
+ + 
 'Request
@@ -1560,16 +1560,29 @@
 nFrame'%5D
+);%0A        %7D)
 ;%0A%0A     
@@ -2169,75 +2169,72 @@
     
-for (var x = 0; x %3C vendors.length && !cancelAnimationFrame; x += 1
+if (!cancelAnimationFrame)%0A        vendors.some(function (vendor
 ) %7B%0A
@@ -2233,32 +2233,42 @@
 ndor) %7B%0A        
+  return (
 cancelAnimationF
@@ -2280,24 +2280,26 @@
 =%0A          
+  
 $window%5Bvend
@@ -2296,29 +2296,27 @@
 indow%5Bvendor
-s%5Bx%5D+
+ + 
 'CancelAnima
@@ -2348,13 +2348,11 @@
 ndor
-s%5Bx%5D+
+ + 
 'Can
@@ -2377,24 +2377,25 @@
 nFrame'%5D
+)
 ;%0A      
 %7D%0A%0A     
@@ -2386,17 +2386,21 @@
 ;%0A      
-%7D
+  %7D);
 %0A%0A      

Switch request animation frame service to use forEach over for loop