﻿var mouseInside = false;
var docTitle = "";
var hdnIsUserLoggedInId = '';
var hdnRedirectToCurrentUrlId = '';
var hdnPostBackAction = '';
var hdnPostScriptDivId = '';
var hdnPostbackControlId = '';
var callBack;
var clickedElementClassName = "";
var oLoginLink = null;

Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequest)

function SetHiddenFieldIds(isUserLoggedInId, redirectToCurrentUrlId, postBackActionId, postBackScriptDivId, postbackControlId) {
    //TODO: Make a class for all these params instead.
    hdnIsUserLoggedInId = isUserLoggedInId;
    hdnRedirectToCurrentUrlId = redirectToCurrentUrlId;
    hdnPostBackAction = postBackActionId;
    hdnPostScriptDivId = postBackScriptDivId;
    hdnPostbackControlId = postbackControlId;
}

function Authenticate(callBackHandler, action, postBackControlUniqueID, className) {
    clickedElementClassName = className;
    if ($('#' + hdnIsUserLoggedInId).length > 0) {

        if ($('#' + hdnPostBackAction).length > 0) {
            $('#' + hdnPostBackAction).val(action);
        }

        if ($('#' + hdnPostbackControlId).length > 0) {
            $('#' + hdnPostbackControlId).val(postBackControlUniqueID);
        }

        if ($('#' + hdnRedirectToCurrentUrlId).length > 0) {
            $('#' + hdnRedirectToCurrentUrlId).val('0');
        }

        if (IsUserLoggedIn() == false) {
            displaySignin('', true);
            callBack = callBackHandler;
        }
        else {
            if ($('#' + hdnPostScriptDivId).length > 0) {
                $('#' + hdnPostScriptDivId).text("__doPostBack('" + postBackControlUniqueID + "','" + action + "');");
            }
            UserAuthenticated();
            callBackHandler(true);
        }

    }
}

function IsUserLoggedIn() {
    isUserLoggedIn = $('#' + hdnIsUserLoggedInId).attr('value');
    if (isUserLoggedIn == '1') {
        return true;
    }
    return false;
}

function UserAuthenticated() {
    if ($('#signInContainer').length > 0) {
        $('#signInContainer').hide();
        if ($('#' + hdnPostScriptDivId).length > 0) {
            eval($('#' + hdnPostScriptDivId).text());
        }
    }
}

function BeginRequest(sender, args) {
    $('input[id$="_hfLastAction"]').val('none');
}

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequest);

function EndRequest(sender, args) {

    $(document).attr('title', docTitle);
    bindSignInEvents();

    if ($('input[id$="_hfLastAction"]').val() == "btnSignIn_Click") {
        displaySignin();
    }

    trimUserName();

    if (IsUserLoggedIn() == true) {
        if (callBack != undefined && typeof callBack == 'function') {
            UserAuthenticated();
            callBack(true);
        }
    }
    else {
        if (callBack != undefined && typeof callBack == 'function') {
            callBack(false);
        }
    }
}

$(window).resize(function () {
    oSignInCon = $('#signInContainer');
    if ($(oSignInCon).css('display') != 'none') {
        setSignInPopupPosition(oSignInCon);
    }
});

$(document).ready(function () {
    docTitle = $(this).attr('title');
    bindSignInEvents();
    trimUserName();
});

function bindSignInEvents() {
    $('#signInContainer').hover(function () {
        mouseInside = true;
    }, function () {
        mouseInside = false;
    });

    $('html').click(function (e) {
        var cName = e.target.className;
        if (cName != 'signinLink' && !mouseInside) {
            if (clickedElementClassName == "" || (clickedElementClassName != "" && cName != clickedElementClassName)) {
                $('#signInContainer').hide();
                revertLoginLinkStyle(oLoginLink);
            }
        }
    });
}

function displaySignin(clickedElementId, displayInCenter) {
    oSignInCon = $('#signInContainer');
    clickedElement = $('#' + clickedElementId);
    if (displayInCenter != undefined && displayInCenter != null && displayInCenter == true) {
        if ($('#signInContainer').length > 0) {
            $('#signInContainer').css("position", "absolute");
            $('#signInContainer').css("top", (($(window).height() - $('#signInContainer').outerHeight()) / 2) + $(window).scrollTop() + "px");
            $('#signInContainer').css("left", (($(window).width() - $('#signInContainer').outerWidth()) / 2) + $(window).scrollLeft() + "px");
        }
    }
    else {
        setSignInPopupPosition(oSignInCon, clickedElement);
    }
    $(oSignInCon).show('slide');
}

function setSignInPopupPosition(oSignInCon, clickedElement) {
    //debugger;
    oSignIn = clickedElement; //$("#signinLink");
    if ($(oSignIn).length > 0) {
        $(oSignInCon).css('right', $('body').outerWidth() - ($(oSignIn).offset().left + $(oSignIn).outerWidth()));
        if (window.location.toString().indexOf("Forside.aspx") > -1) // last minute fix, should be proper fixed later.
        {
            //$(oSignInCon).css('right', (parseInt($(oSignInCon).css('right')) - 159) + "px");
            $(oSignInCon).css('right', 'auto');
            $(oSignInCon).css('left', ($(oSignIn).position().left - $(oSignInCon).width()) + $(oSignIn).width() + 12);
        }
        $(oSignInCon).css('top', ($(oSignIn).offset().top + 15));
        setLoginLinkStyle(oSignIn);
    }
}

function trimUserName() {
    userName = $('a[id$="_lnkUserSettingPage"]');
    if ($(userName).length > 0) {
        $(userName).attr('title', $.trim($(userName).attr('title')));
        $(userName).text($.trim($(userName).text()));
    }
}

function setLoginLinkStyle(oSignIn) {
    $(oSignIn).css('background', '#EFEBE3');
    $(oSignIn).css('margin-left', '8px');
    $(oSignIn).css('font-size', '13.8px');
    $(oSignIn).html('&nbsp;&nbsp;&nbsp;Log ind&nbsp;&nbsp;');
    oLoginLink = oSignIn;
}

function revertLoginLinkStyle(oSignIn) {
    $(oSignIn).css('background', 'white');
    $(oSignIn).css('margin-left', '12px');
    $(oSignIn).css('font-size', '11px');
    $(oSignIn).html('Log ind');
}
