﻿// dependencies : Facebook, Jquery, JQuery UI


// ###############################################################################
// 
// ###############################################################################
(function(){
    //Variables and functions go here.
    permissionList = "publish_stream";
})();

swush = function() {};
swush.fb = function() {};


// ###############################################################################
// returns
// 0 for not connected
// 1 for can post
// 2 for error (unable to reach facebook)
// ###############################################################################
swush.fb.getWallPostStatus = function() {
    var result = $.ajax({
      url: "/Facebook/GetWallPostStatus",
      async: false
     }).responseText;
    return result;
};


// ###############################################################################
// binds current user to facebook. failCallback is optional
// ###############################################################################
swush.fb.bindUserToFacebook = function(successCallback, failCallback) {
    var status = swush.fb.getWallPostStatus();
    if (status == 0) {
        FB.login(function (response) {
            if (response.session) {
                if (response.perms) {
                    //swush.fb.connectedCurrentUser(successCallback);
                    $.get("/Facebook/BindToFacebook", null, function (json) {
                        if (json == 2) {
                            if (failCallback == null)
                                alert('Unable to bind to Facebook, user is currently not authenticated with Facebook Connect.');
                            else
                                failCallback();
                        }
                        else
                            successCallback();
                    });
                } else {
                    // user is logged in, but did not grant any permissions
                    failCallback();
                }
            } else {
                // user is not logged in
                failCallback();
            }
        }, { perms: 'publish_stream' });
      



    }
    else if (status == 1)
        successCallback();
    else {
        if (failCallback != null)
            failCallback();
        else
            alert('Unable to contact Facebook. Try again later.');
    }
};






// ###############################################################################
//
// ###############################################################################
swush.fb.importFacebookAvatar = function(language, callbackSucceed, callbackFail) {
    var OnStart = function() {
        var data = "";
        $.get("/Facebook/ImportFacebookAvatar" + data, null, function(json) {
            if (json == "1")
                callbackSucceed();
            else {
                if (callbackFail == null)
                    alert('Avatar import failed:' + json);
                else
                    callbackFail(json);
            }
        });
    };
    var onBindError = function() {
        alert('An error occurred trying to bind to Facebook.');
    };
    swush.fb.bindUserToFacebook(OnStart, onBindError);
}




// ###############################################################################
// Posts an achievement/award to Facebook. Prompts user to "swush-facebook-bind"
// if user has not already done so. Utilizes the "/Facebook/AwardPostDialog"
// posting dialog - note element and event bindings to this dialog.
// ###############################################################################
swush.fb.postAwardWithDialog = function(awardid, language, onFinished, onFailed, onCancel, dialogHolder) {
    var OnNext = function() {

        var onPost = function() {
            var txtComment = dialogHolder.find('#txtComment');
            var data = "?awardid=" + awardid + "&language=" + language + "&comment=" + txtComment.val();
            $.get("/Facebook/PostAchievement" + data, null, function(json) {
                dialogHolder.dialog('close');
                onFinished(json);
            });
        };

        var cancel = function() {
            dialogHolder.empty();
            dialogHolder.dialog('close');
            if (onCancel != null) onCancel();
        };
        
        // launch dialog
        var html = $.ajax({ url: "/Facebook/AwardPostDialog?awardId=" + awardid + "&language=" + language, async: false }).responseText;
        swush.fb.launchDialog(dialogHolder, html, onPost, cancel);
        /*
        dialogHolder.empty();
        dialogHolder.append(html);

        // bind events
        dialogHolder.find('#btnPost').bind('click', onPost);
        dialogHolder.find('#btnCancel').bind('click', cancel);

        dialogHolder.css('left', ($(window).width() - dialogHolder.width()) / 2);
        dialogHolder.css('top', ($(window).height() - dialogHolder.height()) / 2 - 20);
        dialogHolder.dialog('open');
        dialogHolder.dialog().parents(".ui-dialog").find(".ui-dialog-titlebar").remove();
        */
    };

    // ensure user connected and has enabled permissions on facebook
    swush.fb.bindUserToFacebook(OnNext, onFailed);
};


// ###############################################################################
// 
// ###############################################################################
swush.fb.postTeamStatusWithDialog = function(teamkey, gamekey, language, onFinished, onFailed, onCancel, dialogHolder) {

    var OnNext = function() {

        var onPost = function() {
            var txtComment = dialogHolder.find('#txtComment');
            var rankPriority = dialogHolder.find('#rankPriority').val();
            var data = "?teamkey=" + teamkey + "&gamekey=" + gamekey + "&language=" + language + "&rankpriority=" + rankPriority + "&comment=" + txtComment.val();
            $.get("/Facebook/PostTeamStatus" + data, null, function(json) {
                dialogHolder.dialog('close');
                onFinished(json);
            });
        };

        var cancel = function() {
            dialogHolder.empty();
            dialogHolder.dialog('close');
            if (onCancel != null) onCancel();
        };

        // launch dialog
        var html = $.ajax({ url: "/Facebook/TeamStatusPostDialog?teamkey=" + teamkey + "&gamekey=" + gamekey + "&language=" + language, async: false }).responseText;
        swush.fb.launchDialog(dialogHolder, html, onPost, cancel);
    };

    // ensure user connected and has enabled permissions on facebook
    swush.fb.bindUserToFacebook(OnNext, onFailed);
};

// ###############################################################################
// Gets
// ###############################################################################
swush.fb.getTeamStatusPreview = function(teamkey, gamekey, language, rankPriority) {
    var data = "?teamkey=" + teamkey + "&gamekey=" + gamekey + "&language=" + language + "&rankPriority=" + rankPriority + "";
    /*
    $.get("/Facebook/GetTeamStatusPreview" + data, null, function(json) {
        return json;
    });
    */
    var result = $.json({
        url: "/Facebook/GetTeamStatusPreview" + data,
        async: false
    });
    return result;
}

// ###############################################################################
// Configures, styles and launches a standardized facebook post dialog.
// ###############################################################################
swush.fb.launchDialog = function(dialogHolder, dialogContent, onPost, onCancel) {

    dialogHolder.empty();
    dialogHolder.append(dialogContent);

    // bind events
    dialogHolder.find('#btnPost').bind('click', onPost);
    dialogHolder.find('#btnCancel').bind('click', onCancel);

    dialogHolder.css('left', ($(window).width() - dialogHolder.width()) / 2);
    dialogHolder.css('top', ($(window).height() - dialogHolder.height()) / 2 - 20);
    dialogHolder.dialog('open');
    dialogHolder.dialog().parents(".ui-dialog").find(".ui-dialog-titlebar").remove();
};

// ###############################################################################
// determines if user's facebook profile is fully connected to and authorizing 
// swush.
// Returns : boolean
// ###############################################################################
swush.fb.isUserAuthorized = function (callback) {
    FB.getLoginStatus(function (response) {
        if (response.session != null) {
            FB.api(
            {
                method: 'fql.query',
                query: 'SELECT publish_stream FROM permissions WHERE uid = me()'
            },
            function (response) {
                if (response[0].publish_stream == "1")
                    callback(true);
                else
                    callback(false);
            });
        }
        else
            callback(false);
    });
}



function getQueryStringParameterByName(name) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if (results == null)
        return "";
    else
        return results[1];
}


