﻿var PermissionManagerReference = null;
function PermissionManager(type) {
    this.type = type;
    PermissionManagerReference = this;

    this.RequestedActionFailed = null;
  
    this.setWorkFunction = function(func) {
        this.work = func;
    }
    
    this.setPermissions = function(permission_list) {
        this.permissions = permission_list;
    }
    this.getPermissions = function() {
        return this.permissions;
    }

    this.StartProcessing = function() {
        this.CheckLoginAskPermissions();
    }

    this.LoginAskPermissionsCallback = function(response) {
            if (response.authResponse) {
                PermissionManagerReference.StatusPermissionsChecker(response);
            } else {
                alert(this.RequestedActionFailed);
            }
        }
    
    this.LoginAskPermissions = function() {
            FB.login(this.LoginAskPermissionsCallback, { scope: this.getPermissions() });
        }

    this.CheckUserAppPermissions = function(permissions, uid, cb) {
                FB.Data.query('select {0} from permissions where uid={1}', permissions, uid)
        .wait(function(res) {
            if (!res || res.length < 1) return cb(false);
            var row = res[0];
            var aperm = permissions.split(',');
            for (var i = 0; i < aperm.length; i++) {
                if (row[aperm[i]] != 1) return cb(false);
            }
            return cb(true);
        });
    }

    this.CheckPermissions = function(permissions) {
        var userid = FB.getAuthResponse().userID;
        this.CheckUserAppPermissions(permissions, userid, this.checkPermissionsCallback);
    }

    this.CheckSpecifiedPermissions = function() {
        this.CheckPermissions(this.getPermissions());
    }

    this.StatusPermissionsChecker = function(response) {
        if (response.status == "connected") {
            this.CheckSpecifiedPermissions();
        }
        else {
            this.LoginAskPermissions();
        }
    }

    this.CheckLoginAskPermissions = function() {
        FB.getLoginStatus(this.loginStatusCallback);
    }

    this.loginStatusCallback = function(response) {
        PermissionManagerReference.StatusPermissionsChecker(response);
    }

    this.checkPermissionsCallback = function(res) {
        if (res == true) {
            PermissionManagerReference.work();
        }
        else {
            PermissionManagerReference.LoginAskPermissions();
        }
    }
}

