﻿var requestedPerms = 'publish_stream,offline_access,email,user_birthday,friends_birthday';
var initiated_Func = '';

$(document).ready(function() {
    FPFacebook.init();
});

FPFacebook = {
    init: function() {
        FB.init({
            apiKey: facebook_api,
            status: true,
            cookie: true,
            xfbml: true
        });

        FB.getLoginStatus(function(r) {
            if (r.session) {
                facebook_userId = r.session.uid;
                switch (r.status) {
                    case "connected":
                        //if user has logged in
                        if (!facebook_logged_in && facebook_userId > 0) {
                            callback("Login:" + facebook_userId);
                        }
                        //get permissions
                        FPFacebook.get_granted_permissions(function() {
                        });

                        // Show profile pic on homepage
                        $("#fbPic").show().parentsUntil(".left-side-tab").parent().css("padding-top", "30px");
                        $("#spanWelcome").hide();
                        break;
                    default:
                        if (facebook_logged_in) {
                            FPFacebook.logout();
                        }
                }
                //sync both accounts
                if (!synced_account && funpunch_logged_in) {
                    callback("LinkAccount:" + facebook_userId + ";" + granted_permissions);
                }
                if (initiated_Func.length > 0) {
                    eval(initiated_Func);
                }

            }
            else {
                // update we are no longer logged in
                if (facebook_logged_in) {
                    facebook_logged_in = false;
                    //logout
                    FPFacebook.logout();
                }
            }
        });

        $(".fblogin").click(function(e) {
            e.preventDefault();
            FPFacebook.login();
        });

        $(".fblogout").click(function(e) {
            e.preventDefault();
            FPFacebook.logout();
        });
        FPFacebook.declareEvents();

    },
    login: function() {
        FB.login(function(r) {
            if (r.session) {
                //user logged in
                facebook_logged_in = true;
                switch (r.status) {
                    case "connected":
                        facebook_userId = r.session.uid;
                        //get permissions for user
                        FPFacebook.get_granted_permissions(function() {
                            callback("Login:" + facebook_userId + ";" + granted_permissions);
                            FPFacebook.refreshPage();
                        });
                        break;
                    default:
                        break;
                }
            }
            else {
                //not logged in
            }
        }, { perms: requestedPerms });
    },
    logout: function() {
        FB.logout(function(r) {
            callback("Logout");
        });
    },
    declareEvents: function() {
        FB.Event.subscribe('auth.sessionChange', function(r) {
            switch (r.status) {
                case "connected":
                    facebook_logged_in = true;
                    facebook_userId = r.session.uid;
                    break;
                case "unknown":
                    break;
                default:
                    facebook_logged_in = false;
            }
        });
    },
    get_granted_permissions: function(callback) {
        FB.api(
        {
            method: "fql.query",
            query: "SELECT " + requestedPerms + " FROM permissions WHERE uid=" + facebook_userId
        },

        function(response) {
            granted_permissions = "";
            var permission = response[0];
            var allPerms = requestedPerms.split(',');
            //check status of each permission
            for (i = 0; i < allPerms.length; i++) {
                if (permission[allPerms[i]] == 1) {
                    granted_permissions += allPerms[i] + ",";
                }
            }
            granted_permissions = granted_permissions.substr(0, granted_permissions.length - 1);
            callback();
        });
    },
    user_has_permission: function(permission) {
        return granted_permissions.indexOf(permission) > -1;
    },
    refreshPage: function() {
        //redirect back to page in case of postbacks
        window.location = window.location.href;
    },
    get_friends: function(num, template, container) {
        if (facebook_logged_in && FPFacebook.user_has_permission("friends_birthday")) {
            FB.api(
           {
               method: "fql.query",
               query: "SELECT name, birthday, pic_square, uid FROM user  WHERE uid IN ( SELECT uid2 FROM friend WHERE uid1 = " + facebook_userId + ")  ORDER BY name"
           },
           function(users) {
               FPFacebook.display_friends(users, num, template, container);
           });
        }
        else if (facebook_logged_in) {
            //request permission
            FB.login(function(r) {
                if (r.session && facebook_logged_in) {
                    if (r.perms.indexOf("friends_birthday") > -1) {
                        FPFacebook.get_granted_permissions(function() {
                            if (FPFacebook.user_has_permission("friends_birthday")) {
                                FB.api(
           {
               method: "fql.query",
               query: "SELECT name, birthday, pic_square, uid FROM user  WHERE uid IN ( SELECT uid2 FROM friend WHERE uid1 = " + facebook_userId + ")  ORDER BY name"
           },
           function(users) {
               FPFacebook.display_friends(users, num, template, container);
           });
                            }
                        });
                    }
                }
                else if (r.session) {
                    facebook_userId = r.session.uid;
                    callback("Login:" + facebook_userId);
                }
            }, { perms: "friends_birthday" });
        }
    },
    display_friends: function(users, num, template, container) {
        //ensure we have what we need
        if (!container || !container.html() || !template || !template.html()) {
            return;
        }

        var content = template.html();

        //show all
        if (num == -1)
            num = users.length;

        num = num > users.length ? users.length : num;

        users.splice(num, users.length - num);

        for (i = 0; i < users.length; i++) {
            var divContent = content.replace(/\$name/g, users[i].name);
            divContent = divContent.replace(/\$pic_url/g, users[i].pic_square);
            divContent = divContent.replace(/\$uid/g, users[i].uid);

            //if user has been posted to change anchor to paragraph text
            if (shared_userIds.indexOf(',' + users[i].uid + ',') > -1) {
                divContent = divContent.replace(/\$action/, "<p style=\"display: block; margin-top: 5px;\">Shared</p>");
            }
            else {
                divContent = divContent.replace(/\$action/, '<a class="a' + users[i].uid + '" style="display: block; margin-top: 5px;" href="#" onclick="javascript:startpublish(' + users[i].uid + ');" id="hpShare">+ Share</a>');
            }
            container.append(divContent);
        }

        //remove template
        template.remove();
        //fade in
        container.show("slow");
    },
    stream_publish: function(customMessage, messageTemplate, attachmentSrc, pageLocation, siteName, uid, callback_func, sentecardid) {
        if (facebook_logged_in && FPFacebook.user_has_permission("publish_stream")) {
            var path = (uid === facebook_userId ? 'me' : uid) + "/feed";

            FB.api(
           {
               method: "fql.query",
               query: "SELECT name FROM user WHERE uid = " + facebook_userId
           },
           function(user) {
               var userMessage = messageTemplate.replace(/\$name/g, user[0].name);
               userMessage = userMessage.replace(/\$siteName/g, siteName);
               var description = siteName + " have ecards for every occasion, including birthday, anniversary, Christmas, love and Valentine's Day. " + siteName + " have funny ecards, rude, sexy and silly cards. You can read more about our ecard selection below. When you're ready to send ecards just click on a thumbnail or link to explore all the ecards we have.";
               FB.api(path, 'post', { message: userMessage, picture: attachmentSrc, link: pageLocation, name: "Click here to view your ecard", description: description }, function(response) {
                   if (!response || response.error) {
                       alert('Error occured');
                       callback_func(null);
                   }
                   else {
                       callback_func(response, uid, sentecardid);
                   }
               });
           });
        }
        else {
            //get permission to post to wall
            FB.login(function(r) {
                if (r.session && facebook_logged_in) {
                    if (r.perms.indexOf("publish_stream") > -1) {
                        FPFacebook.get_granted_permissions(function() {
                            if (FPFacebook.user_has_permission("publish_stream")) {
                                FPFacebook.stream_publish(customMessage, messageTemplate, attachmentSrc, pageLocation, siteName, uid, callback_func);
                            }
                        });
                    }
                }
                else if (r.session) {
                    facebook_userId = r.session.uid;
                    callback("Login:" + facebook_userId);
                }
            }, { perms: "publish_stream" });
        }
    },
    replace_text: function(element, uid) {
        var userData = null;
        FB.api(
           {
               method: "fql.query",
               query: "SELECT name FROM user WHERE uid = " + uid
           },
           function(user) {
               userData = user[0];
               element.text(element.text().replace("[fullname]", userData.name));
           });
    }
};
