﻿/// <reference path="../jquery-vsdoc.js" />

$(document).ready(function() {
    $("#timerdisplay").addClass("timer");
    $("#moretimebutton").hide();
});

function SessionTimer(minutesUntilTimeOut, minutesForWarning) {
    var runWarningMinutes = (minutesUntilTimeOut - minutesForWarning);
    var runWarningMs = runWarningMinutes * 60 * 1000;
    var msUntilTimeOut = minutesUntilTimeOut * 60 * 1000;

    var rightNow;
    var targetTime;

    _updateTargetTime();

    setTimeout(AlertUser, runWarningMs);
    setInterval(UpdateClock, 1000);
    var expiredSessionTimeout = setTimeout(SessionExpired, msUntilTimeOut); 

    function AlertUser() {
        $("#timerdisplay")
            .removeClass("timer")
            .addClass("timerimminent");
        $("#moretimebutton").show();
        $("#moretimebutton").click(RefreshSession);
    }

    function CancelAlertUser() {
        $("#timerdisplay")
            .removeClass("timerimminent")
            .addClass("timer");
        $("#moretimebutton").hide();
        $("#moretimebutton").unbind('click');
        clearTimeout(expiredSessionTimeout);
        expiredSessionTimeout = setTimeout(SessionExpired, msUntilTimeOut);
    }
    
    function UpdateClock() {
        var rightNow = new Date();

        var msRemaining = targetTime - rightNow;
        var secondsRemaining = msRemaining / 1000;
        var minutesRemaining = parseInt(msRemaining / 1000 / 60);
        var secondsLeft = parseInt(secondsRemaining - ((minutesRemaining) * 60));
        var display = _formatRemainingTime(minutesRemaining, secondsLeft);
        $("#timeleft").html(display);
    }

    function SessionExpired() {
        $("#timerdisplay").html("Your session has expired, you are being redirected to the login page...");
        // This message will display on the login page.
        document.cookie = "logoutmessage=For your protection, sessions are open for a limited period of time.  Please sign in again.;"
        
        // Make some attempts to disable any prompts to save data.
        if (window.onbeforeunload != null) window.onbeforeunload = null;
        if (doOnBeforeUnload != null) removeEvent(window.body ? window.body : window, 'beforeunload', doOnBeforeUnload);
        if (navHelper != null && navHelper.needConfirmation != null) navHelper.needConfirmation = false;
        
        window.location = "/COINMate/Logout.aspx";
    }

    function removeEvent(obj, evType, fn) {
        if (obj.removeEventListener) {
            obj.removeEventListener(evType, fn, false);
            return true;
        } else if (obj.detachEvent) {
            var r = obj.detachEvent("on" + evType, fn);
            return r;
        } else {
            return false;
        }
    }

    function RefreshSession() {
        $.get("Dashboard.aspx", function(data) {
            // data is ignored: not pulling the real session time left, just assuming it is same as before
            _updateTargetTime();
            CancelAlertUser();
        });
    }

    function _updateTargetTime() {
        rightNow = new Date();
        targetTime = new Date();
        targetTime.setMinutes(rightNow.getMinutes() + minutesUntilTimeOut);
    }

    function _formatRemainingTime(minutesRemaining, secondsLeft) {
        return minutesRemaining.toString() +
                ":" +
                _right("0" + secondsLeft.toString(), 2);
    }

    function _right(str, n) {
        if (n <= 0)
            return "";
        else if (n > String(str).length)
            return str;
        else {
            var iLen = String(str).length;
            return String(str).substring(iLen, iLen - n);
        }
    }
}


