﻿//authenticate
function authenticate() {
    //initialize username and password
    var redirectTarget = document.URL.toString();
    var queryString = "";
    var username = document.getElementById('usernameInput').value;
    var password = document.getElementById('passwordInput').value;
    var userId = '';

    //authenticate user
    PageMethods.authenticateUser(username, password, function(result) {

        //parse result
        var resultArr = JSON.parse(result);
        userId = resultArr[0].userId;
        var queryString = "&userId=" + resultArr[0].userId + "&username=" + resultArr[0].username;

        //redirect user to authenticated page
        authenticated = true; //switch authenticated global located in metalmaster

        //create session for user
        PageMethods.startSession(userId, function(resultSession) {

            //update query string
            queryString = '&sessionId=' + resultSession + queryString;

            //redirect user to newly authenticated page with session tracking
            window.location = redirectTarget + queryString;

        }, function(error) {
            //error message
            var str = '' + 'ExceptionType: ' + error.get_exceptionType() +
                                      '\n' + 'Message: ' + error.get_message() +
                                      '\n' + 'Status Code: ' + error.get_statusCode() +
                                      '\n' + 'Timed Out: ' + error.get_timedOut() +
                                      '\n\n' + 'Stack Trace: ' + error.get_stackTrace() +
                                      '\n'; alert(str);
        });
    }, function(error) {
        //error message
        var str = '' + 'ExceptionType: ' + error.get_exceptionType() +
                                  '\n' + 'Message: ' + error.get_message() +
                                  '\n' + 'Status Code: ' + error.get_statusCode() +
                                  '\n' + 'Timed Out: ' + error.get_timedOut() +
                                  '\n\n' + 'Stack Trace: ' + error.get_stackTrace() +
                                  '\n'; alert(str);
    });  

    //redirect user to newly authenticated page with session trackin
}

//transform milliseconds to a string containing minutes and seconds
function millisecondsToMinutes(passedMs) {
    //transform time which in millisecond into a readable string
    var sec = passedMs / 1000;
    var readableTime = '';
    var min = 0;

    //while more than 60 seconds
    while (sec >= 60) {
        sec = sec - 60; //deduct a minute
        min++;          //increment minute counter
    }

    //build readable time string
    if (min != 0) { //if there is a minute
        readableTime = min + ' minutes and ' + parseInt(sec) + ' secondes';
    } else { //if only seconds
        readableTime = parseInt(sec) + ' secondes';
    }

    //reutrn readable
    return readableTime;
}

//record page visit when page unloads ONLY IN IE
function recordPageVisit(passedPageId, passedTimeMs) {
    //initialize
    var sessionId = getQueryArg('sessionId');
    var currentTime = millisecondsToMinutes(passedTimeMs);
    
    //record sessionItem
    PageMethods.recordSessionItem(sessionId, passedPageId, millisecondsToMinutes(passedTimeMs), function(resultItem) {
        var timeKill = '';
        timeKill = resultItem.toString();
    }, function(error) {
        //error message
        var str = '' + 'ExceptionType: ' + error.get_exceptionType() +
                                      '\n' + 'Message: ' + error.get_message() +
                                      '\n' + 'Status Code: ' + error.get_statusCode() +
                                      '\n' + 'Timed Out: ' + error.get_timedOut() +
                                      '\n\n' + 'Stack Trace: ' + error.get_stackTrace() +
                                      '\n'; alert(str);
    });
}

//record visits at set intervals
function recordIntervalVisit(passedSessionItem, passedPageId, passedTimeMs) {

    var readableTime = millisecondsToMinutes(passedTimeMs);
    var sessionId = getQueryArg('sessionId');
    
    //record visit    
    if (passedSessionItem == undefined) { //first interval, create sessionItem row
        //record first sessionItem interval
        readableTime = 'moins que 30 secondes';       
        PageMethods.recordSessionItem(sessionId, passedPageId, readableTime, function(resultItem) {
            currentSessionItem = resultItem;
        }, function(error) {
            //error message
            var str = '' + 'ExceptionType: ' + error.get_exceptionType() +
                                      '\n' + 'Message: ' + error.get_message() +
                                      '\n' + 'Status Code: ' + error.get_statusCode() +
                                      '\n' + 'Timed Out: ' + error.get_timedOut() +
                                      '\n\n' + 'Stack Trace: ' + error.get_stackTrace() +
                                      '\n'; alert(str);
        });
    } else { //update session Intervals with new time
    //record first sessionItem interval
        PageMethods.updateSessionItem(passedSessionItem, readableTime, function() {
        
        }, function(error) {
            //error message
            var str = '' + 'ExceptionType: ' + error.get_exceptionType() +
                                          '\n' + 'Message: ' + error.get_message() +
                                          '\n' + 'Status Code: ' + error.get_statusCode() +
                                          '\n' + 'Timed Out: ' + error.get_timedOut() +
                                          '\n\n' + 'Stack Trace: ' + error.get_stackTrace() +
                                          '\n'; alert(str);
        });
    }
}


//log out
function logout() {
    var url = unescape(document.URL);

    //removing Id
    var urlWithoutLogin = url.substring(0, url.indexOf('&'));

    //redirect to logged out page
    window.location = urlWithoutLogin;
} 

