﻿//
// functions you have to implement (probably in master page)
//

//        function isSocialNetWorkUserAuthenticated() {
//            return $('#<%= hidIsAuthenticated.ClientID %>').val() == "true";
//        }
//        function setSocialNetWorkUserIsAuthenticated(isAuthenticated) {
//            var value = isAuthenticated ? "true" : "false";
//            return $('#<%= hidIsAuthenticated.ClientID %>').val(value);
//        }
//        function getPublisherId() {
//            return $('#<%= hidPublisherId.ClientID %>').val();
//        }
//        function getAjaxManager() {
//            return $find('<%= Master.AjaxManager.ClientID %>');
//        }

// global auth vars
var pageMethodPath; // you have to set this!!!

var lastAction;
var lastTarget;
var lastArgs;
var lastScript;

/* internal call action */
function doLastAction() {
    // executes initial action
    if (lastAction == "ajax") {
        // alert("ajaxRequestWithTarget(" + lastTarget + "," + lastArgs + ")");
        getAjaxManager().ajaxRequestWithTarget(lastTarget, lastArgs);
    }
    else if (lastAction == "script") {
        // alert("eval(" + lastScript + ")");
        eval(lastScript);
    }
    else {
        // alert("__doPostBack(" + lastTarget + "," + lastArgs + ")");
        __doPostBack(lastTarget, lastArgs);
    }
}

/* call auth */
function __doSecuredScript(script) {
    // remember script
    lastScript = script;
    return __doSecuredPostBack(null, null, "script");
}
function __doSecuredClick(self, arg) {
    // target is UniqueId (formEl.name)
    var target = typeof (self.name) == "undefined" ? self : self.name;
    return __doSecuredPostBack(target, arg, "regular");
}
function __doSecuredIndexChange(sender, arg) {
    // target is ClientId (domEl.id)
    var target = sender.get_id();
    arg.set_cancel(false)
    return __doSecuredPostBack(target, arg, "ajax");
}
function __doSecuredPostBack(target, arg, action) {

    // alert(target + ", " + arg);

    if (typeof (isSocialNetWorkUserAuthenticated) == "undefined") {
        alert("You have to implement 'isSocialNetWorkUserAuthenticated()' in your page/master");
    }

    // remember args
    lastAction = action;
    lastTarget = target;
    lastArgs = arg;

    // call external 'isAuthenticated-method'
    if (isSocialNetWorkUserAuthenticated()) {
        // execute
        doLastAction();
    }
    else {
        // check auth
        promptForPassword();
    }
}

function promptForPassword() {
/// no text parameters needed, prompt template is 'hard coded'
    radprompt(getPublisherId(),
        promptCallBackFn, 330, 100, null,
        '', '');
}

function promptCallBackFn(arg) {
    // call external method
    var currentPublisherId = getPublisherId();  
    pageMethodPath = stripTrailingSlash(pageMethodPath);
    if (arg != null) {
        // alert("Calling Authenticate-PageMethod with: " + currentPublisherId + "[" + Base64.encode(currentPublisherId, true) + "] |" + arg + "[" + Base64.encode(arg, true) + "]");
        
        // ajax-check publisher auth
        $.ajax({
            type: "POST",
            url: pageMethodPath + "/Login/Authenticate.aspx/CheckPublisherCredentials", // TODO: absolute path!!
            // TODO: encrypt password, ..?
            data: "{cryptedPublisherId:'" + Base64.encode(currentPublisherId, true) + "',cryptedPassword:'" + Base64.encode(arg, true) + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {

                if (msg.d == true) {
                    // mark as logged in
                    setSocialNetWorkUserIsAuthenticated(true);

                    // execute
                    doLastAction();
                } else {
                    // re-prompt
                    promptForPassword();
                }
            }
        });
    }
}


function stripTrailingSlash(str) {
    if (str.substr(-1) == '/') {
        return str.substr(0, str.length - 1);
    }
    return str;
}
     
