String.prototype.endsWith = function(str) {return (this.match(str+"$")==str)} window.Facebook = { loginFailedMessage: 'Login failed.', redirectUrl: '/', Login: function (callback) { return FB.getLoginStatus(function (response) { var cb; if (response.status === 'connected') { return Facebook.GetUserData(callback); } else { cb = function (resp) { if (!resp.authResponse) { Facebook.ShowError(); return; } return Facebook.GetUserData(callback); }; return FB.login(cb, { scope: "email" }); } }); }, GetUserData: function (callback) { FB.api('/me', function (user) { var session; if (!user) { Facebook.ShowError(); return; } if (user.error != null) { Facebook.ShowError(); return; } session = FB.getAuthResponse(); if (!(session && session.accessToken)) { Facebook.ShowError(); } return callback(user, session); }); }, LoginSucceeded: function (state) { if (state == 0) { if (Facebook.redirectUrl.length === 0) { top.location.reload(); } else if (Facebook.redirectUrl.endsWith('.zip') || Facebook.redirectUrl.endsWith('.rar')) { top.location = Facebook.redirectUrl; window.setTimeout(function () { top.location.reload(); }, 300); } else { top.location = Facebook.redirectUrl; } } else { Facebook.ShowError(); } }, ShowError: function () { return alert(Facebook.loginFailedMessage); } }; $(function () { var callback = function (user, session) { return SilverlightShow.Services.FacebookLogin.LoginUser(user.first_name, user.last_name, user.email, session.accessToken, Facebook.LoginSucceeded); }; $('a.facebook-login-button').live('click', function () { return Facebook.Login(callback); }); });