(function($){
// Display a Facebook login button.
//
//
// Usage
// =====
//
// > $("some#container").append($.facebook_login_button());
//
//
// Optional Parameters
// ===================
//
// caption:
//     Displayed on button. Default value is `"Login"`
//
// size:
//     Can be one of the following values: small, medium, large, xlarge, icon
//     Default value is `"small"`
//
// callback:
//      Called when the operation is finished. Given a response parameter.
//
// perms:
//      A comma seperated list of permissions if any. Default value is `""`

$.facebook_login_button = function(opts) {
    var settings = {
        caption: "Login",
        size: "small",
        callback: function(response) {
            var ssl = "";
            if(document.location.protocol == "https:"){
                ssl = "?return_ssl_resources=1";
            }
            var userImage = $('<img/>')
                .attr("src", document.location.protocol + "//graph.facebook.com/" + response.authResponse.userID + "/picture"+ssl);
            $('div.fb-profile-pic:empty').append(userImage);
            },
        scope: "email"
    };
    if(opts) { $.extend( settings, opts); }

    var clickHandler = function() {
        FB.login(settings.callback, {scope: settings.scope});
        return false;
    }
    return $("<a></a>")
                .addClass("fb_button")
                .addClass("fb_button_" + settings.size)
                .append($("<span></span>")
                              .addClass("fb_button_text")
                              .text(settings.caption))
                .click(clickHandler);
}


// Checks for Facebook authorization and displays a login button if necessary.
//
// This plugin ensures Facebook is initialized before running code.
//
//
// Usage
// =====
//
// > $("div.facebook")
// >     .facebook_require_login(foo,
// >                             {caption: "Login to foo with your friends"});
//
//
// Required Parameters
// ===================
//
// callback:
//    Executed once the user is authorized.
//
//
// Optional Parameters
// ===================
//
// login_opts:
//     This array is passed as `facebook_login_button`s parameters. Note that
//     callback parameter will be passed to facebook_login_button.

$.fn.facebook_require_login = function(callback, login_opts) {
    $.extend(login_opts, {callback: callback});
    var this_ = this;
    var handler = function() {
        FB.getLoginStatus(function(response) {
            if (response.authResponse) {
                callback();
                var ssl = "";
                if(document.location.protocol == "https:"){
                    ssl = "?return_ssl_resources=1";
                }
                var userImage = $('<img/>')
                    .attr("src", document.location.protocol + "//graph.facebook.com/" + response.authResponse.userID + "/picture"+ssl);
                $('div.fb-profile-pic:empty').append(userImage);
            } else {
                $(this_).append($.facebook_login_button(login_opts));
            }
        });
    };
    if (!window.FB) {
        $(document).bind("FACEBOOK_INIT", handler);
    } else {
        handler();
    }
};

})(jQuery);

