function CBXSession() { var _this = this; this.mess = {}; this.timeout = null; this.sessid = null; this.bShowMess = true; this.dateStart = new Date(); this.dateInput = new Date(); this.dateCheck = new Date(); this.activityInterval = 0; this.notifier = null; this.Expand = function(timeout, sessid, bShowMess, key) { this.timeout = timeout; this.sessid = sessid; this.bShowMess = bShowMess; this.key = key; BX.ready(function(){ BX.bind(document, "keypress", _this.OnUserInput); BX.bind(document.body, "mousemove", _this.OnUserInput); BX.bind(document.body, "click", _this.OnUserInput); setTimeout(_this.CheckSession, (_this.timeout-60)*1000); }) }, this.OnUserInput = function() { var curr = new Date(); _this.dateInput.setTime(curr.valueOf()); } this.CheckSession = function() { var curr = new Date(); if(curr.valueOf() - _this.dateCheck.valueOf() < 30000) return; _this.activityInterval = Math.round((_this.dateInput.valueOf() - _this.dateStart.valueOf())/1000); _this.dateStart.setTime(_this.dateInput.valueOf()); var interval = (_this.activityInterval > _this.timeout? (_this.timeout-60) : _this.activityInterval); BX.ajax.get('/bitrix/tools/public_session.php?sessid='+_this.sessid+'&interval='+interval+'&k='+_this.key, function(data){_this.CheckResult(data)}); } this.CheckResult = function(data) { if(data == 'SESSION_EXPIRED') { if(_this.bShowMess) { _this.notifier = document.body.appendChild(BX.create('DIV', { props: {className: 'bx-session-message'}, style: {top: '-1000px'}, html: ''+_this.mess.messSessExpired })); var windowScroll = BX.GetWindowScrollPos(); var windowSize = BX.GetWindowInnerSize(); _this.notifier.style.left = parseInt(windowScroll.scrollLeft + windowSize.innerWidth / 2 - parseInt(_this.notifier.clientWidth) / 2) + 'px'; var fxStart = windowScroll.scrollTop - _this.notifier.offsetHeight; var fxFinish = windowScroll.scrollTop; (new BX.fx({ time: 0.5, step: 0.01, type: 'accelerated', start: fxStart, finish: fxFinish, callback: function(top){_this.notifier.style.top = top + 'px';}, callback_complete: function() { if(BX.browser.IsIE()) { BX.bind(window, 'scroll', function() { var windowScroll = BX.GetWindowScrollPos(); _this.notifier.style.top = windowScroll.scrollTop + 'px'; }); } else { _this.notifier.style.top='0px'; _this.notifier.style.position='fixed'; } } })).start(); } } else { var timeout; if(data == 'SESSION_CHANGED') timeout = (_this.timeout-60); else timeout = (_this.activityInterval < 60? 60 : (_this.activityInterval > _this.timeout? (_this.timeout-60) : _this.activityInterval)); var curr = new Date(); _this.dateCheck.setTime(curr.valueOf()); setTimeout(_this.CheckSession, timeout*1000); } } this.Close = function() { this.notifier.style.display = 'none'; } } var bxSession = new CBXSession();