﻿/// <reference path="../jq/jquery.intellisense.js"/>

var facebook =
{
    // properties
    fbApiKey: '',
    fbRedirectUri: '/account/setup?redirectfb&invitecode=',
    inFacebookMode: false,

    // methods
    init: function (_fbApiKey) {
        facebook.fbApiKey = _fbApiKey;

        $('#noaccount-link').click(function () {
            facebook.showloginform();
        });

        $('#logout-button').click(function () {
            FB.Connect.logout(function () {
                document.location = '/account/logout';
            });

            return false;
        });

        $('#have-inbox2-account-link').click(function () {
            $('#login-box').slideToggle();
            $('.choice').slideUp();
        });
        $('#dont-have-inbox2-account-link').click(function () {
            facebook.require_login(function () {
                $('#try-box').slideToggle();
                $('.choice').slideUp();
                $('#invitecode').focus();
            });
        });


        $('#try-box').find('#invitecode').keydown(function (e) {
            if (facebook.inFacebookMode) {
                var code = (e.keyCode ? e.keyCode : e.which);
                if (code == 13) {
                    facebook.validate_invite_code();
                }
            }
        });
        $('#try-box').find('#bt-try-box').click(function () {
            if (facebook.inFacebookMode) {
                facebook.validate_invite_code();
            }
        });
    },
    validate_invite_code: function () {
        $('#bt-try-box').attr('disabled', 'true');
        $('#try-box').find('strong.errormessage').remove();
        var invitecode = $('#invitecode').val();
        $.post('/services/validateinvitecode', { 'invitecode': invitecode }, function (data) {
            $('#bt-try-box').removeAttr('disabled');
            if (data.result) {
                facebook.fbRedirectUri = '/account/setup?redirectfb&invitecode=' + invitecode;

                FB_RequireFeatures(["Api"], function () {
                    FB.Facebook.init(facebook.fbApiKey, "/xd_receiver.htm");
                    FB.Connect.requireSession(function () {
                        FB.Facebook.apiClient.users_hasAppPermission('offline_access', function (result, exception) {
                            if (result == 0) {
                                // Ask for extended permissions
                                FB.Connect.showPermissionDialog('offline_access, read_stream, publish_stream, read_mailbox', function (res) {
                                    document.location = facebook.fbRedirectUri;
                                });
                            } else {
                                document.location = facebook.fbRedirectUri;
                            }
                        });
                    });
                });
            }
            else {
                var header = '<h2>' + $('#try-box .invite-box-content').find('h2').html() + '</h2>';
                $('#try-box .invite-box-content').find('h2').remove();
                $('#try-box .invite-box-content').prepend(header + '<strong class="errormessage">' + data.message + '</strong>');
            }
        }, 'json');
    },
    scrollto: function (x, y) {
        FB_RequireFeatures(["Api"], function () {
            FB.Facebook.init(facebook.fbApiKey, "/xd_receiver.htm");
            FB.CanvasClient.scrollTo(x, y);
        });
    },
    streampublish: function (url) {
        FB_RequireFeatures(["Api"], function () {
            FB.Facebook.init(facebook.fbApiKey, "/xd_receiver.htm");
            FB.Connect.requireSession(function () {
                FB.Facebook.apiClient.users_hasAppPermission('publish_stream', function (result, exception) {
                    if (result == 0) {
                        // Ask for extended permissions
                        FB.Connect.showPermissionDialog('publish_stream', function (res) {
                            // Forces the FBConnect authentication module to register our userauth entry
                            document.location = '/facebookconnect';
                        });
                    } else {
                        var image = { 'media': [{ 'type': 'image', 'src': document.contentbase + '/i/emailstream-fb-button.jpg', 'href': url}] };
                        var actionLink = [{ 'text': 'Get started with Inbox2', 'href': url}];
                        FB.Connect.streamPublish('I just started using Inbox2 in Facebook. Quite handy to have all my e-mail and twitter accounts in one place. Just took me few seconds to get started. Want to try it out? Click on the button.', image, actionLink, null, null, function () { }, true);
                    }
                });
            });
        });
    },
    redirect: function (uri) {
        FB_RequireFeatures(["Api"], function () {
            FB.Facebook.init(facebook.fbApiKey, "/xd_receiver.htm");
            FB.Connect.ifUserConnected(function () {
                FB.Connect.requireSession(function () {
                    document.location = uri;
                });
            }, function () {
                document.location = uri;
            });
        });
    },
    connect: function () {
        FB_RequireFeatures(["Api"], function () {
            FB.Facebook.init(facebook.fbApiKey, "/xd_receiver.htm");
            FB.Connect.requireSession(function () {
                FB.Facebook.apiClient.users_hasAppPermission('offline_access', function (result, exception) {
                    if (result == 0) {
                        // Ask for extended permissions
                        FB.Connect.showPermissionDialog('offline_access, read_stream, publish_stream, read_mailbox', function (res) {
                            // Forces the FBConnect authentication module to register our userauth entry
                            document.location = '/facebookconnect';
                        });
                    } else {
                        $('#box-streampublish').removeClass('hidden');
                        $('#box-streampublish').slideDown();
                        FB.CanvasClient.startTimerToSizeToContent();
                    }
                });
            });
        });
    },
    require_login: function (fn) {
        FB_RequireFeatures(["Api"], function () {
            FB.Facebook.init(facebook.fbApiKey, "/xd_receiver.htm");
            FB.Connect.requireSession(function () {
                if (typeof (fn) != 'undefined')
                    fn();
            });
        });
    },
    showloginform: function () {
        $('.choice').hide();
        $('#login-box').show();
    }
}