function showFBFriends() {
   FB.Facebook.apiClient.friends_get(null, function(result) {         
      ajaxHelper({
         url: '/user/add_facebook_friends',
         parameters: { facebook_uids: $TO_JSON(result) },
         callback: function(res, show) {
            if (show) {
               window.facebook_friends_modal = new Control.Modal(null, {
                  contents: res.responseText,
                  opacity: 0.1,
                  width: 400,
                  height: 300,
                  overlayCloseOnClick: false,
                  overlayCloseOnEsc: false
               });
               facebook_friends_modal.open();
               FB.XFBML.Host.parseDomTree();                  
            }
         }
      });
   });
}

function doFBLogin(redirect, user, city, zip, country, lat, lng) {
   ajaxHelper({
      url: '/user/login_facebook',
      parameters: {
         redirect: redirect,
         facebook_uid: user.uid,
         fullname: user.name,
         first_name: user.first_name || '',
         last_name: user.last_name || '',
         username: user.username || '',
         birthdate: user.birthday_date,
         biography: user.about_me || user.profile_blurb || '',
         home: city,
         zip_code: zip,
         country: country,
         lat: lat,
         lng: lng,
         remember_me: $F('remember-me')
      },
      callback: function(res) {
         if (res.responseText.match(/^\s*$/)) return showFBFriends();
         if (res.responseText.match(/^OK$/)) return showFBFriends();
         window.facebook_modal = new Control.Modal(null, {
            contents: res.responseText,
            opacity: 0.3,
            width: 340,
            height: 300,
            overlayCloseOnClick: false,
            overlayCloseOnEsc: false
         });
         facebook_modal.open();
      }
   });
}

function loginViaFacebook(redirect) {
   FB.Facebook.apiClient.users_getInfo(
      FB.Facebook.apiClient.get_session().uid,
      ['name', 'current_location', 'hometown_location', 'first_name', 'last_name', 'username', 'birthday_date', 'about_me', 'profile_blurb'],
      function(data) {
         var user = data[0];
         var location = user.hometown_location || user.current_location || {};
         if (location.zip && location.country) {
            new GClientGeocoder().getLocations(location.zip + "," + location.country, function(res) {
               doFBLogin(
                  redirect,
                  user,
                  location.city,
                  location.zip,
                  res.Placemark[0].AddressDetails.Country.CountryNameCode.toLowerCase(),
                  res.Placemark[0].Point.coordinates[1],
                  res.Placemark[0].Point.coordinates[0]
               );
            });
         } else {
            doFBLogin(redirect, user);
         }
      }
   );
};

function publishOnFacebook(cb) {
   if (! cb.checked) return true;
   setTimeout(function() {
      var session = FB.Facebook.apiClient.get_session();
      FB.Connect.requireSession(function() {
         $EL('publish_on_facebook').checked = true;
         if (! session) loginViaFacebook('no');
      });
   }, 10);
   return false;
}

function closeMergeModal(redirect) {
   facebook_modal.close();
   if (redirect != 'no') location.reload();
   else showFBFriends();
   return false;
}
