﻿SessionTimeout = { initialised: false, authenticateUrl: null, timeoutInterval: null, lastUserId: null, timeoutIdentifier: null, isActive: false, lastActiveCookieName: "stLastActive", lastActiveDate: new Date(), loginForm: null, loginFormPollIdentifier: null, processingMsg: null, errorMsg: null, usernameField: null, passwordField: null, diffUserLoginLink: null, init: function(a) { if (typeof $.cookie == "undefined") { throw "SessionTimeout requires cookies class" } if (SessionTimeout.initialised) { throw "SessionTimeout has already been initialised" } SessionTimeout.initialised = true; SessionTimeout.authenticateUrl = a.authenticateUrl; SessionTimeout.timeoutInterval = a.timeoutInterval; SessionTimeout.lastUserId = a.lastUserId; SessionTimeout.lastActiveCookieName += a.lastUserId; SessionTimeout.diffUserLoginLink = a.diffUserLoginLink; SessionTimeout.initForm(a); $.cookie(SessionTimeout.lastActiveCookieName, SessionTimeout.lastActiveDate.toGMTString(), { path: "/" }); SessionTimeout.timeoutIdentifier = window.setTimeout(SessionTimeout.timeout, 1000 * SessionTimeout.timeoutInterval * 60) }, initForm: function(a) { SessionTimeout.loginForm = $("#" + a.formId); if (SessionTimeout.loginForm.length == 0) { throw "Form with id: " + a.formId + " could not be found" } SessionTimeout.loginForm.hide(); SessionTimeout.processingMsg = $("#" + a.processingMsgId); if (SessionTimeout.processingMsg.length == 0) { throw "Processing message element with id: " + a.processingMsgId + " could not be found" } SessionTimeout.errorMsg = $("#" + a.errorMsgId); if (SessionTimeout.errorMsg.length == 0) { throw "Error message element with id: " + a.errorMsgId + " could not be found" } SessionTimeout.usernameField = $("#" + a.usernameFieldId); if (SessionTimeout.usernameField.length == 0) { throw "Username field with id: " + a.usernameFieldId + " could not be found" } SessionTimeout.passwordField = $("#" + a.passwordFieldId); if (SessionTimeout.passwordField.length == 0) { throw "Password field with id: " + a.passwordFieldId + " could not be found" } }, timeout: function() { if (SessionTimeout.checkActiveDate()) { return } SessionTimeout.showForm() }, getActiveDate: function() { var a = $.cookie(SessionTimeout.lastActiveCookieName); if (a != null) { var b = new Date(a); if (SessionTimeout.lastActiveDate < b) { return b } } return null }, showForm: function() { if (SessionTimeout.isLoginFormActive()) { SessionTimeout.cleanup() } SessionTimeout.isActive = true; SessionTimeout.processingMsg.hide(); SessionTimeout.errorMsg.hide(); SessionTimeout.loginForm.dialog({ autoOpen: false, modal: true, bgiframe: true, resizable: false, dialogClass: "sessionTimeoutDialog", title: "Session Timeout", beforeclose: function() { return false }, buttons: { "Log in": SessionTimeout.login_click} }).dialog("open"); SessionTimeout.usernameField.val(""); SessionTimeout.passwordField.val(""); SessionTimeout.usernameField.focus(); SessionTimeout.checkActiveDate(true) }, checkActiveDate: function(b) { var a = SessionTimeout.getActiveDate(); if (a != null) { SessionTimeout.cleanup(a); return true } else { if (b) { SessionTimeout.loginFormPollIdentifier = window.setTimeout(function() { SessionTimeout.checkActiveDate(true) }, 1000) } } return false }, login_click: function(c) { SessionTimeout.processingMsg.show(); SessionTimeout.errorMsg.hide(); var d = SessionTimeout.usernameField.val(); var b = SessionTimeout.passwordField.val(); var a = { cmd: "login", username: d, password: b, lastUserId: SessionTimeout.lastUserId }; $.ajax({ url: SessionTimeout.authenticateUrl, type: "POST", data: (a), dataType: "text", success: SessionTimeout.onAuthResponse, error: SessionTimeout.onError }) }, onAuthResponse: function(c) { var b = c == "True"; if (!b) { SessionTimeout.processingMsg.hide(); var a = "Invalid Login"; if (c == "DiffUser") { a = 'You are attempting to login with a user account that does not match the previously logged in user. Please use <a href="' + SessionTimeout.diffUserLoginLink + '">this link</a> to login with your account.' } SessionTimeout.errorMsg.html(a); SessionTimeout.errorMsg.show(); SessionTimeout.loginForm.dialog("refresh"); return } $.cookie(SessionTimeout.lastActiveCookieName, new Date().toGMTString(), { path: "/" }); SessionTimeout.cleanup() }, onError: function(a, c, b) { SessionTimeout.processingMsg.hide(); SessionTimeout.errorMsg.hide(); $("<div>").html("There was a problem sending the authentication request.\nIf this continues please contact CareerHub support.").dialog({ modal: true, bgiframe: true, resizable: false, title: "Alert", buttons: { Close: function() { $(this).dialog("close") } } }) }, cleanup: function(a) { window.clearTimeout(SessionTimeout.timeoutIdentifier); window.clearTimeout(SessionTimeout.loginFormPollIdentifier); SessionTimeout.loginForm.dialog("option", "beforeclose", function() { return true }); SessionTimeout.loginForm.dialog("close"); SessionTimeout.isActive = false; SessionTimeout.lastActiveDate = new Date(); var b = SessionTimeout.timeoutInterval * 1000 * 60; if (a != null) { b = b - (SessionTimeout.lastActiveDate.getTime() - a.getTime()) } SessionTimeout.timeoutIdentifier = window.setTimeout(SessionTimeout.timeout, b) }, isLoginFormActive: function() { return SessionTimeout.isActive } };