$(function() {

  $('#fconnect').bind('click', fconnect);
  $('#flogout').bind('click', flogout);

});

var facebook_perm_normalize = function(permissions) {
  var implode = function( glue, pieces ) {
    return ( ( pieces instanceof Array ) ? pieces.join ( glue ) : pieces );
  }

  var permissions_array = permissions.split(',');

  permissions = '';

  for(key in permissions_array) {
    permissions_array[key] = $.trim(permissions_array[key]);
  }

  return implode(',', permissions_array);
}

var facebook_perm_check = function(fperms, rperms) {
  var rperms_array = rperms.split(',');

  var _valid_count = 0;
  for(key in rperms_array) {
    if(fperms.indexOf(rperms_array[key]) != -1) {
      _valid_count++;
    }
  }
  return _valid_count == rperms_array.length ? true : false;
}

var facebook_callback = function(redirect) {
  window.location.href = window.location.protocol + '//' + window.location.host + '/auth/login/service/facebook'+redirect;
}

var facebook_user_callback = function(part) {
  var _add = (part != undefined) ? 'part/'+part : '';
  window.location.href = window.location.protocol + '//' + window.location.host + '/auth/connect/service/facebook/'+_add;
}

var fconnect = function(is_user, part, redirect, addFriend) {
  if (!redirect) redirect = '';
  facebook_params.permissions = facebook_perm_normalize(facebook_params.permissions);
    
  FB.login(function(response) {
    if (response.session) {
      if (response.perms) {
        if(facebook_perm_check(response.perms, facebook_params.permissions)) {
          if((is_user != undefined) && is_user == true){
            if(part != undefined) {
              facebook_user_callback(part);
            } else {
              if (addFriend != undefined) {
                dialog(addFriend);
                facebook_user_callback();
              } else {
                facebook_user_callback();
              }
            }
          } else {
            facebook_callback(redirect);
          }
        } else {
          alert('Facebook sharing needs all required permissions.');
        }
      } else {
        alert('Facebook sharing needs all required permissions.');
      }
    } else {
      // user is not logged in
      alert('Facebook user not logged');
    }
  }, {
    perms: facebook_params.permissions
  });
    
}

var flogout = function() {
  FB.Connect.logoutAndRedirect(window.location.protocol + '//' + window.location.host + '/auth/logout');
}



var dialog = function(addFriend){
  $("body").append('<div id="dialog" title="Facebook">You must add this user p2r to friends so that we can fast on fashey wall in Facebook.</div>');
  $("#dialog").dialog("destroy");
  $("#dialog").dialog({
    resizable: false,
    height:200,
    width: 400,
    modal: true,
    buttons: {
      'Ok': function() {
        var params = "menubar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes"
        window.open("http://www.facebook.com/profile.php?id="+addFriend, "Add frinrd", params)
        $(this).dialog('close');
      },
      Cancel: function() {
        $(this).dialog('close');
      }
    }
  });
}
