var SessionHandler = (function () { var sessionHandler = function () {}; var interval = 0; var countDownTimer; var timerSpanElement; var timerUrl; var warnTime = 60; var refreshTime = 60; var warningTrigered = false; var warnMethod = function () {}; var endMethod = function () {}; sessionHandler.SetTimeSpanElement = function (element) { timerSpanElement = element; }; sessionHandler.Url = function (url) { timerUrl = url; }; sessionHandler.WarningTime = function (second) { warnTime = second; }; sessionHandler.WarnMethod = function (method) { warnMethod = method; }; sessionHandler.EndMethod = function (method) { endMethod = method; }; sessionHandler.Start = function () { getRemainingTime(); }; sessionHandler.Clear = function () { resetInterval(); }; function startSessionTimer(duration) { var countDownTimer = 0; var actualTime = duration; resetInterval(); interval = setInterval(function () { var minutes = parseInt(actualTime / 60, 10); var seconds = parseInt(actualTime % 60, 10); minutes = minutes < 10 ? '0' + minutes : minutes; seconds = seconds < 10 ? '0' + seconds : seconds; setSpanText(minutes, seconds); countDownTimer = countDownTimer + 1; actualTime = duration - countDownTimer; if (actualTime < warnTime) { if (!warningTrigered) { getRemainingTime(); } } else { warningTrigered = false; } if (countDownTimer > refreshTime || actualTime < 1) { getRemainingTime(); } }, 1000); } function getRemainingTime() { resetInterval(); if (typeof timerUrl !== 'undefined') { AjaxHelper.AsyncPingPost(timerUrl, remainingTimeCallback); } } function remainingTimeCallback(remainingSeconds) { if (remainingSeconds < 1) { resetInterval(); endMethod(); return; } if (remainingSeconds < warnTime) { if (!warningTrigered) { warningTrigered = true; warnMethod(); } } startSessionTimer(remainingSeconds); } function resetInterval() { clearInterval(interval); interval = 0; } function setSpanText(minutes, seconds) { if (timerSpanElement) { if (timerSpanElement.is('p')) { timerSpanElement.text('(' + minutes + ':' + seconds + ')'); } } } return sessionHandler; })();