AUI.add("liferay-notification",function(A){var Notification=A.Component.create({EXTENDS:Liferay.Alert,NAME:"liferaynotification",prototype:{_getAlertsContainer:function _getAlertsContainer(targetNode){var instance=this;targetNode=targetNode||A.one("body");var alertsContainer=instance._alertsContainer;if(!alertsContainer){var rootNode=targetNode||instance.get("rootNode")||A;alertsContainer=targetNode&&targetNode.one(".lfr-notification-container")||rootNode.one(".lfr-notification-container");if(!alertsContainer){alertsContainer=
A.Node.create(instance.TPL_ALERTS_CONTAINER);targetNode.prepend(alertsContainer)}instance._alertsContainer=alertsContainer}return alertsContainer},TPL_ALERT_NODE:'\x3cdiv class\x3d"lfr-notification-wrapper"\x3e\x3c/div\x3e',TPL_ALERTS_CONTAINER:'\x3cdiv class\x3d"lfr-notification-container"\x3e\x3c/div\x3e'}});Liferay.Notification=Notification},"",{requires:["liferay-alert"]});
AUI.add("liferay-session",function(A){var Lang=A.Lang;var BUFFER_TIME=[];var CONFIG=A.config;var DOC=CONFIG.doc;var MAP_SESSION_STATE_EVENTS={active:"activated"};var SRC={};var SRC_EVENT_OBJ={src:SRC};var URL_BASE=themeDisplay.getPathMain()+"/portal/";var SessionBase=A.Component.create({ATTRS:{autoExtend:{value:false},redirectOnExpire:{value:true},redirectUrl:{value:""},sessionLength:{getter:"_getLengthInMillis",value:0},sessionState:{value:"active"},sessionTimeoutOffset:{getter:"_getLengthInMillis",
value:0},timestamp:{getter:"_getTimestamp",setter:"_setTimestamp",value:0},warningLength:{getter:"_getLengthInMillis",setter:"_setWarningLength",value:0},warningTime:{getter:"_getWarningTime",value:0}},EXTENDS:A.Base,NAME:"liferaysession",prototype:{_afterSessionStateChange:function _afterSessionStateChange(event){var instance=this;var details=event.details;var newVal=event.newVal;var src=null;if("src"in event&&details.length)src=details[0];instance.fire(MAP_SESSION_STATE_EVENTS[newVal]||newVal,src)},
_defActivatedFn:function _defActivatedFn(event){var instance=this;instance.set("timestamp");if(event.src==SRC)Liferay.Util.fetch(URL_BASE+"extend_session").then(function(response){if(response.status===500)instance.expire()})},_defExpiredFn:function _defExpiredFn(event){var instance=this;A.clearInterval(instance._intervalId);instance.set("timestamp","expired");if(event.src===SRC)instance._expireSession()},_expireSession:function _expireSession(){var instance=this;Liferay.Util.fetch(URL_BASE+"expire_session").then(function(response){if(response.ok){Liferay.fire("sessionExpired");
if(instance.get("redirectOnExpire"))location.href=instance.get("redirectUrl")}else A.setTimeout(function(){instance._expireSession()},1E3)})},_getLengthInMillis:function _getLengthInMillis(value){return value*1E3},_getTimestamp:function _getTimestamp(){var instance=this;return A.Cookie.get(instance._cookieKey,instance._cookieOptions)||instance._initTimestamp},_getWarningTime:function _getWarningTime(){var instance=this;return instance.get("sessionLength")-instance.get("warningLength")},_initEvents:function _initEvents(){var instance=
this;instance.publish("activated",{defaultFn:A.bind("_defActivatedFn",instance)});instance.publish("expired",{defaultFn:A.bind("_defExpiredFn",instance)});instance.publish("warned");instance._eventHandlers=[instance.on("sessionStateChange",instance._onSessionStateChange),instance.after("sessionStateChange",instance._afterSessionStateChange),A.on("io:complete",function(transactionId,response,args){if(!args||args&&args.sessionExtend||!Lang.isBoolean(args.sessionExtend))instance.resetInterval()}),Liferay.once("screenLoad",
function(){instance.destroy()})]},_onSessionStateChange:function _onSessionStateChange(event){var instance=this;var newVal=event.newVal;var prevVal=event.prevVal;if(prevVal=="expired"&&prevVal!=newVal)event.preventDefault();else if(prevVal=="active"&&prevVal==newVal)instance._afterSessionStateChange(event)},_setTimestamp:function _setTimestamp(value){var instance=this;value=String(value||Date.now());instance._initTimestamp=value;if(navigator.cookieEnabled)A.Cookie.set(instance._cookieKey,value,instance._cookieOptions)},
_setWarningLength:function _setWarningLength(value){var instance=this;return Math.min(instance.get("sessionLength"),value)},_startTimer:function _startTimer(){var instance=this;var sessionLength=instance.get("sessionLength");var sessionTimeoutOffset=instance.get("sessionTimeoutOffset");var warningTime=instance.get("warningTime");var registered=instance._registered;var interval=1E3;instance._intervalId=A.setInterval(function(){var sessionState=instance.get("sessionState");var timeOffset;var timestamp=
instance.get("timestamp");var elapsed=sessionLength;if(Lang.toInt(timestamp)){timeOffset=Math.floor((Date.now()-timestamp)/1E3)*1E3;elapsed=timeOffset;if(instance._initTimestamp!==timestamp){instance.set("timestamp",timestamp);if(sessionState!="active")instance.set("sessionState","active",SRC_EVENT_OBJ)}}else timestamp="expired";var extend=instance.get("autoExtend");var expirationMoment=false;var warningMoment=false;var hasExpired=elapsed>=sessionLength;var hasExpiredTimeoutOffset=elapsed>=sessionLength-
sessionTimeoutOffset;var hasWarned=elapsed>=warningTime;if(hasExpiredTimeoutOffset||hasWarned){if(timestamp=="expired"){expirationMoment=true;extend=false;hasExpired=true;hasExpiredTimeoutOffset=true}if(hasExpiredTimeoutOffset&&sessionState!="expired")if(extend&&!hasExpired){expirationMoment=false;hasExpired=false;hasExpiredTimeoutOffset=false;hasWarned=false;warningMoment=false;instance.extend()}else{instance.expire();expirationMoment=true}else if(hasWarned&&!hasExpiredTimeoutOffset&&!extend&&sessionState!=
"warned"){instance.warn();warningMoment=true}}for(var i in registered)registered[i](elapsed,interval,hasWarned,hasExpired,hasExpiredTimeoutOffset,warningMoment,expirationMoment)},interval)},_stopTimer:function _stopTimer(){var instance=this;A.clearInterval(instance._intervalId)},destructor:function destructor(){var instance=this;(new A.EventHandle(instance._eventHandlers)).detach();instance._stopTimer()},expire:function expire(){var instance=this;instance.set("sessionState","expired",SRC_EVENT_OBJ)},
extend:function extend(){var instance=this;instance.set("sessionState","active",SRC_EVENT_OBJ)},initializer:function initializer(){var instance=this;instance._cookieKey="LFR_SESSION_STATE_"+themeDisplay.getRealUserId();instance._cookieOptions={path:"/",secure:A.UA.secure};instance._registered={};instance.set("timestamp");instance._initEvents();instance._startTimer()},registerInterval:function registerInterval(fn){var instance=this;var fnId;var registered=instance._registered;if(Lang.isFunction(fn)){fnId=
A.stamp(fn);registered[fnId]=fn}return fnId},resetInterval:function resetInterval(){var instance=this;instance._stopTimer();instance._startTimer()},unregisterInterval:function unregisterInterval(fnId){var instance=this;var registered=instance._registered;if(Object.prototype.hasOwnProperty.call(registered,fnId))delete registered[fnId];return fnId},warn:function warn(){var instance=this;instance.set("sessionState","warned",SRC_EVENT_OBJ)}}});SessionBase.SRC=SRC;var SessionDisplay=A.Component.create({ATTRS:{pageTitle:{value:DOC.title}},
EXTENDS:A.Plugin.Base,NAME:"liferaysessiondisplay",NS:"display",prototype:{_afterDefActivatedFn:function _afterDefActivatedFn(){var instance=this;instance._uiSetActivated()},_afterDefExpiredFn:function _afterDefExpiredFn(){var instance=this;instance._host.unregisterInterval(instance._intervalId);instance._uiSetExpired()},_beforeHostWarned:function _beforeHostWarned(){var instance=this;var host=instance._host;var sessionLength=host.get("sessionLength");var timestamp=host.get("timestamp");var warningLength=
host.get("warningLength");var elapsed=sessionLength;if(Lang.toInt(timestamp))elapsed=Math.floor((Date.now()-timestamp)/1E3)*1E3;var remainingTime=sessionLength-elapsed;if(remainingTime>warningLength)remainingTime=warningLength;var banner=instance._getBanner();var counterTextNode=banner.one(".countdown-timer").getDOMNode();instance._uiSetRemainingTime(remainingTime,counterTextNode);banner.show();instance._intervalId=host.registerInterval(function(elapsed,interval,hasWarned,hasExpired,warningMoment){if(!hasWarned)instance._uiSetActivated();
else if(!hasExpired){if(warningMoment){if(remainingTime<=0)remainingTime=warningLength;banner.show()}elapsed=Math.floor((Date.now()-timestamp)/1E3)*1E3;remainingTime=sessionLength-elapsed;instance._uiSetRemainingTime(remainingTime,counterTextNode)}remainingTime-=interval})},_destroyBanner:function _destroyBanner(){var instance=this;instance._banner=false;var notificationContainer=A.one(".lfr-notification-container");if(notificationContainer)notificationContainer.remove()},_formatNumber:function _formatNumber(value){return Lang.String.padNumber(Math.floor(value),
2)},_formatTime:function _formatTime(time){var instance=this;time=Number(time);if(Lang.isNumber(time)&&time>0){time/=1E3;BUFFER_TIME[0]=instance._formatNumber(time/3600);time%=3600;BUFFER_TIME[1]=instance._formatNumber(time/60);time%=60;BUFFER_TIME[2]=instance._formatNumber(time);time=BUFFER_TIME.join(":")}else time=0;return time},_getBanner:function _getBanner(){var instance=this;var banner=instance._banner;if(!banner){banner=(new Liferay.Notification({closeable:true,delay:{hide:0,show:0},duration:500,
message:instance._warningText,on:{click:function click(event){if(event.domEvent.target.test(".alert-link")){event.domEvent.preventDefault();instance._host.extend()}else if(event.domEvent.target.test(".close")||event.domEvent.target.ancestor(".close",true,".liferayalert")){instance._destroyBanner();instance._alertClosed=true}},focus:function focus(event){if(instance._alert){var notificationContainer=A.one(".lfr-notification-container");if(!notificationContainer.contains(event.domEvent.relatedTarget))instance._alert.setAttribute("role",
"alert")}}},title:'Warning',type:"warning"})).render("body");instance._banner=banner}return banner},_onHostSessionStateChange:function _onHostSessionStateChange(event){var instance=this;if(event.newVal=="warned")instance._beforeHostWarned(event)},_uiSetActivated:function _uiSetActivated(){var instance=this;DOC.title=instance.reset("pageTitle").get("pageTitle");instance._host.unregisterInterval(instance._intervalId);var banner=instance._getBanner();if(banner)instance._destroyBanner()},
_uiSetExpired:function _uiSetExpired(){var instance=this;var banner=instance._getBanner();banner.setAttrs({message:instance._expiredText,title:'Danger',type:"danger"});DOC.title=instance.get("pageTitle");if(instance._alert)instance._alert.setAttribute("role","alert")},_uiSetRemainingTime:function _uiSetRemainingTime(remainingTime,counterTextNode){var instance=this;remainingTime=instance._formatTime(remainingTime);if(!instance._alertClosed){var alert=counterTextNode.closest('div[role\x3d"alert"]');
if(alert){alert.removeAttribute("role");instance._alert=alert}counterTextNode.innerHTML=remainingTime}DOC.title=Lang.sub('Session\x20expires\x20in\x20\x7b0\x7d\x2e',[remainingTime])+" | "+instance.get("pageTitle")},destructor:function destructor(){var instance=this;if(instance._banner)instance._destroyBanner()},initializer:function initializer(){var instance=this;var host=instance.get("host");if(Liferay.Util.getTop()==CONFIG.win){instance._host=host;instance._toggleText={hide:'Hide',
show:'Show'};instance._expiredText='Due\x20to\x20inactivity\x2c\x20your\x20session\x20has\x20expired\x2e\x20Please\x20save\x20any\x20data\x20you\x20may\x20have\x20entered\x20before\x20refreshing\x20the\x20page\x2e';instance._warningText='Due\x20to\x20inactivity\x2c\x20your\x20session\x20will\x20expire\x20in\x20\x7b0\x7d\x2e\x20To\x20extend\x20your\x20session\x20another\x20\x7b1\x7d\x20minute\x28s\x29\x2c\x20please\x20press\x20the\x20\x3cem\x3eExtend\x3c\x2fem\x3e\x20button\x2e\x20\x7b2\x7d';instance._warningText=Lang.sub(instance._warningText,['\x3cspan class\x3d"countdown-timer"\x3e{0}\x3c/span\x3e',host.get("sessionLength")/6E4,'\x3ca class\x3d"alert-link" href\x3d"#"\x3e'+'Extend'+"\x3c/a\x3e"]);host.on("sessionStateChange",instance._onHostSessionStateChange,
instance);instance.afterHostMethod("_defActivatedFn",instance._afterDefActivatedFn);instance.afterHostMethod("_defExpiredFn",instance._afterDefExpiredFn)}else host.unplug(instance)}}});Liferay.SessionBase=SessionBase;Liferay.SessionDisplay=SessionDisplay},"",{requires:["aui-timer","cookie","liferay-notification"]});
