var FBConnect = {
  
  isLoggedInToAMF: false,
  amfUserIsFacebookUser: false,
  serverSideFacebookUid: null,
  
  init: function() {
    FB.init("bfbfe930ca74d07d55173b83da024465", "/spFacebookConnectPlugin/xd_receiver.htm", {doNotUseCachedConnectState: true});
    FBConnect.syncLoginStates();
  },
  
  login: function() {
    var redirect = function(emailPermission) {
      document.location = "/fbconnect/login?emailPermission=" + (emailPermission ? "true" : "false") + "&redirect=" + encodeURIComponent(document.location.href);
    };
    FB.ensureInit(function() {
      FB.Connect.requireSession(function() {
        FB.Facebook.apiClient.users_hasAppPermission("email", function(result) {
          if (!result) {
            FB.Connect.showPermissionDialog("email", function(permissions) {
              if (!permissions) {
                redirect(false);
              } else {
                redirect(true);
              };
            });
          } else {
            redirect(true);
          }
        });
      });
    });
  },
  
  logout: function() {
    FB.ensureInit(function() {
      FB.Connect.logout(function() {
        document.location = "/fbconnect/logout?redirect=" + encodeURIComponent(document.location.href);
      });
    });
  },
  
  syncLoginStates: function() {
    FB.ensureInit(function() {
      FB.Connect.get_status().waitUntilReady(function(status) {
        if (status == FB.ConnectState.connected) {
          if (!FBConnect.isLoggedInToAMF) {
            FBConnect.login();
          } else if (FBConnect.serverSideFacebookUid != String(FB.Connect.get_loggedInUser())) {
            FBConnect.login();
          }
        } else {
          if (FBConnect.amfUserIsFacebookUser)
            FBConnect.logout();
        }
      });
    });
  }
  
};

window.addEvent("load", FBConnect.init);
