define(['angular'], function (angular) { var ClaimsInfo = angular.module('claimsinfo', []); ClaimsInfo.controller('ClaimsInfoController', ['$scope', function ($scope) { function currentYPosition() { // Firefox, Chrome, Opera, Safari if (self.pageYOffset) return self.pageYOffset; // Internet Explorer 6 - standards mode if (document.documentElement && document.documentElement.scrollTop) return document.documentElement.scrollTop; // Internet Explorer 6, 7 and 8 if (document.body.scrollTop) return document.body.scrollTop; return 0; } function elmYPosition(eID) { var elm = document.getElementById(eID), y = elm.offsetTop, node = elm; while (node.offsetParent && node.offsetParent != document.body) { node = node.offsetParent; y += node.offsetTop; } if (window.innerWidth >= 768) y -= 78; return y; } $scope.scrollToAnchor = function (eID) { var startY = currentYPosition(), stopY = elmYPosition(eID); var distance = stopY > startY ? stopY - startY : startY - stopY; var speed = Math.round(distance / 100); if (speed >= 20) speed = 20; var step = Math.round(distance / 25), leapY = stopY > startY ? startY + step : startY - step, timer = 0; if (stopY > startY) { for (var i = startY; i < stopY; i += step) { setTimeout("window.scrollTo(0, " + leapY + ")", timer * speed); leapY += step; if (leapY > stopY) leapY = stopY; timer++; } return; } for (var i = startY; i > stopY; i -= step) { setTimeout("window.scrollTo(0, " + leapY + ")", timer * speed); leapY -= step; if (leapY < stopY) leapY = stopY; timer++; } }; }]); return ClaimsInfo; });