if (typeof $Auth == "undefined") var $Auth = {
    valid: function() {
        var sess_key = $Auth.getSessionKey();
        if (!sess_key) {
            return false;
        } else {
            return true;
        }
    },
    getSessionKey: function() {
        var sess_key = $U.readCookie('sKey');
        return sess_key;
    },
    getSessionDomain: function() {
        var domain = $U.readCookie('sDomain');
        return domain;
    },
    getSessionDomainPick: function() {
        var domain_pick = $U.readCookie('sDomainPick');
        return domain_pick;
    },
    getSessionUsername: function() {
        var u = $U.readCookie('sUsername');
        return u;
    },
    createSession: function(username, key, domain, perms, days) {
            
        days = typeof(days) != 'undefined' ? days : 0;            
            
        $U.createCookie('sKey', key, days);
        $U.createCookie('sDomain', domain, days);
        $U.eraseCookie('sDomainPick');
        $U.createCookie('sUsername', username, days);
        var sPerms = '';
        for (x in perms) {
            sPerms += x + ':' + perms[x] + '|';
        }
        $U.createCookie('sPerms', sPerms, days);
    },
    destroySession: function(callback) {
        var sess_key = $Auth.getSessionKey();
        $Client.req(
            "Auth",
            "logout",
            {
                key: sess_key
            },
            function (data) {
                callback(data);
            }
            );
        $U.eraseCookie('sKey');
    },
    authAdmin: function(username, password, domain, callback) {
        $Client.hiddenReq(
            "Auth",
            "authAdmin",
            {
                username: username,
                password: password,
                domain: domain
            },
            function (data) {
                callback(data);
            }
            );
    },
    authUser: function(username, password, domain, callback) {
        $Client.req(
            "Auth",
            "authUser",
            {
                username: username,
                password: password,
                domain: domain
            },
            function (data) {
                callback(data);
            }
            );
    },
    granted: function(resource, privilege) {
        var sPerms = $U.readCookie('sPerms');
        if (sPerms) {
            var aPerms = sPerms.split('|');
            for (x in aPerms) {
                if (aPerms[x]) {
                    var perm = aPerms[x].split(':');
                    if (perm[0] == resource && perm[1] == privilege) {
                        return true;
                    }
                }
            }
        }
        return false;
    },
    restrictedToDomain: function() {
        domain = $Auth.getSessionDomain();
        domain_pick = $Auth.getSessionDomainPick();
        if (domain_pick && domain != domain_pick) {
            return true;
        } else {
            return false;
        }
    },
    showSessionData: function(callback) {

        u = $Auth.getSessionUsername();
        $(".session-data-login span").html($Lang.tr("Session granted for @param1", {
            '@param1': u
        }));

        //display unread messages status
        $U.checkUnreadMsg();

        domain = $Auth.getSessionDomain();
        domain_pick = $Auth.getSessionDomainPick();

        $(".session-data").html("");
        $(".session-data-secondary").html("");

        var domains_array = new Array();
        domains_array[0] = domain;
        domains_array[1] = domain_pick;

        $Client.req(
            "DomainsTree",
            "getDomainPath",
            {
                domain_id: domains_array
            },
            function (data) {
                // the domain
                var path = '';
                if (data) {
                    for (var x in data[0]) {
                        if (path == '') {
                            path = data[0][x]['name'];
                        } else {
                            path += ' / ' + data[0][x]['name'];
                        }
                    }
                }
                $G.vSet('sDomainName', path);
                if (path) $(".session-data").html($Lang.tr("Restricted to @param1 ", {
                    '@param1': $Lang.i(path)
                    }));

                // the picked domain
                path = '';
                if (data) {
                    for (var x in data[1]) {
                        if (x > 0) {
                            if (path == '') {
                                path = data[1][x]['name'];
                            } else {
                                path += ' / ' + data[1][x]['name'];
                            }
                        }
                    }
                }
                $G.vSet('sDomainPickName', path);
                if (path) $(".session-data-secondary").html($Lang.tr("Operating over @param1 ", {
                    '@param1': $Lang.i(path)
                    }));
                if (typeof(callback) == "function") {
                    callback();
                }
            }
            );
    }
}

