jQuery(document).ready(function($) {

    // static-like object
        window.FacebookUtils = {

            // properties
            facebookCallbackUrl : "/facebook/callback",

            initializeWithApiKey : function(apiKey, ifUserNotConnectedCallback) {

                FB_RequireFeatures( [ "XFBML" ], function() {
                    FB.init( {
                        apiKey : apiKey,
                        xdChannelUrl : "/receive",
                        debugLogLevel : 0,
                        ifUserNotConnected : ifUserNotConnectedCallback
                    });

                    // when session is new and user has remember me cookie, synch session with facebook, if session is valid then log user in.
                        if (rememberMeCookie != null && rememberMeCookie) {
                            FB.Facebook.get_sessionState().waitUntilReady(function(session) {
                                var is_now_logged_into_facebook = session ? true : false;
                                if (is_now_logged_into_facebook) {
                                    FacebookUtils.checkPermissions();
                                }
                            });
                        }
                    });
            },

            checkPermissions : function() {
                var url = "/facebook/check-priviladges";
                ModalUtils.getAjaxJson(url, function(results) {
                    if (!results.hasPermissions) {
                        FB.Connect.showPermissionDialog('offline_access,publish_stream', function() {
                            ModalUtils.getAjaxJson(url, function(results) {
                                if (!results.hasPermissions) {
                                    ModalUtils.viewInsufficientPrivsModal();
                                } else {
                                    if (results.hq23Frob) {
                                        AddPhotos.showDirectHq23SignupModalForm();
                                    } else {
                                        window.location = "/facebook/callback/";
                                    }
                                }
                            }, 3, function() {
                            });
                        });
                    } else {
                        if (results.hq23Frob) {
                            AddPhotos.showDirectHq23SignupModalForm();
                        } else {
                            window.location = "/facebook/callback/";
                        }
                    }
                }, 3, function() {
                });
            },
            signout : function() {
                $.ajax( {
                    type : 'GET',
                    url : '/signout',
                    dataType : 'html',
                    data : {},
                    error : function() {
                    },
                    success : function(msg) {
                        window.location.reload();
                    },
                    complete : function() {
                    }
                });
            },
            checkFacebookSession : function() {
                FB.Connect.requireSession();
                FB.Facebook.get_sessionState().waitUntilReady(function(session) {
                    var is_now_logged_into_facebook = session ? true : false;
                    if (is_now_logged_into_facebook) {
                        FacebookUtils.checkPermissions();
                    }
                });
            },
            logout : function(apiKey, ifUserNotConnectedCallback) {
                connected = function() {
                    FB.Connect.logoutAndRedirect('/signout');
                }
                notConnected = function() {
                    window.location.href = '/signout/';
                }
                FB.Connect.ifUserConnected(connected, notConnected)

            }

        };

    });
