/* @author 	Bryan Migliorisi
 * @version 2.2.1
 *
 * 01-25-12
 * Updated to use latest facebook loader
 *
 * 06-09-10
 * Fixed the invite friends dialog box and related strings
 *
 * 02-04-10643
 *
 * Added fbc event to tell you wen a user has actually posted something to facebook.
 *
 * 11-12-09
 * Updated to use latest facebook connect methods and included the strings in this file
 *
 * 08-28-09
 * - Fixed media play page commenting with default images
 *
 * 08-07-09
 * - Fixed message board logic
 *
 * 06-03-09
 * - Added additional logging
 * - Fixed profile page commenting
 *
 * 04-28-09
 * - Added additional logging capabilities for FBConnect
 *
 * 04-03-09
 * - Added support for inviting friends from Facebook into your community
 *
 * 03-31-09
 * - Added scroller for auto smooth centering of fbConnect dialog
 *
 * 03-28-09
 * - Initial commit of fbConnect code
 *
 */

(function(){
    // Load Ka.Messages
    Ka.Messages.FacebookConnect = Ka.Messages.FacebookConnect || {

        DEFAULT_STORY_TITLE: "Check out what's happening at ($siteName)",
        ACTION_LINK_TEXT: "Check it out now, on ($siteName)!",
        DIALOG_PROMPT: "Tell your Facebook Friends about ($siteName)",

        ADD_FRIEND_TITLE: "Invite your Facebook friends to join ($siteName).",
        ADD_FRIEND_CONFIRM: "Join ($siteName)!",
        ADD_FRIEND_CONTENT: "Hey... I think you might like to join ($siteName).",
        ADD_FRIEND_ACTIONTEXT: "Invite your Facebook friends to join ($siteName).",

        ADD_MEDIA_BLOG:  "{*actor*} added a new blog entry titled \"($mediaTitle)\" at ($siteName).",
        ADD_MEDIA_BLOG_TITLE: "Check out this new blog entry on ($siteName)",

        ADD_MEDIA_PHOTO: "{*actor*} uploaded a new photo titled \"($mediaTitle)\" at ($siteName).",
        ADD_MEDIA_PHOTO_TITLE: "Check out this new photo on ($siteName)",

        ADD_MEDIA_AUDIO: "{*actor*} uploaded a new audio track titled \"($mediaTitle)\" at ($siteName).",
        ADD_MEDIA_AUDIO_TITLE: "Check out this new audio track on ($siteName)",

        ADD_MEDIA_VIDEO: "{*actor*} uploaded a new video titled \"($mediaTitle)\" at ($siteName).",
        ADD_MEDIA_VIDEO_TITLE: "Check out this new video on ($siteName)",

        MEDIA_COMMENT_BLOG:  "{*actor*} commented on \"($mediaTitle)\", a blog post at ($siteName).",
        MEDIA_COMMENT_PHOTO: "{*actor*} commented on \"($mediaTitle)\", a photo at ($siteName).",
        MEDIA_COMMENT_AUDIO: "{*actor*} commented on \"($mediaTitle)\", an audio track at ($siteName).",
        MEDIA_COMMENT_VIDEO: "{*actor*} commented on \"($mediaTitle)\", a video at ($siteName).",

        MEDIA_ADD_FAVORITE: "{*actor*} added \"($mediaTitle)\", a(n) ($mediaType) at ($siteName), to their favorites.",

        MEMBER_PROFILE_COMMENT: "{*actor*} commented on \"($mediaTitle)\", another member at ($siteName).",
        MEMBER_JOIN_COMMUNITY: "{*actor*} recently joined ($siteName).",

        GROUP_JOIN: "{*actor*} joined \"($mediaTitle)\", a group at ($siteName).",
        GROUP_LEAVE: "{*actor*} left \"($mediaTitle)\", a group at ($siteName).",

        MESSAGE_BOARD_CREATE_DISCUSSION: "{*actor*} started a discussion entitled ($mediaTitle) at ($siteName)."
    }

    // Load Settings for FacebookConnect script
    Ka.Settings.FacebookConnect = Ka.Settings.FacebookConnect || {actions: {
        /* ADDING MEDIA */
        'add-audio': {enabled: true, message: "ADD_MEDIA_AUDIO"},
        'add-blog':  {enabled: true, message: "ADD_MEDIA_BLOG"},
        'add-photo': {enabled: true, message: "ADD_MEDIA_PHOTO"},
        'add-video': {enabled: true, message: "ADD_MEDIA_VIDEO"},

        /* COMMENTING ON MEDIA */
        'media-audio-commenting': {enabled: true, message: "MEDIA_COMMENT_AUDIO"},
        'media-blog-commenting':  {enabled: true, message: "MEDIA_COMMENT_BLOG"},
        'media-photo-commenting': {enabled: true, message: "MEDIA_COMMENT_PHOTO"},
        'media-video-commenting': {enabled: true, message: "MEDIA_COMMENT_VIDEO"},
        'media-add-favorite': 	  {enabled: true, message: "MEDIA_ADD_FAVORITE", buttonHtml: '<input class="ka_fb_connect ka_button" type="checkbox" />Tell my Facebook friends!'},

        /* MEMBERS */
        'member-profile-commenting': {enabled: true, message: "MEMBER_PROFILE_COMMENT"},
        'member-join-community': {enabled: true, message: "MEMBER_JOIN_COMMUNITY"},

        /* GROUPS */
        'group-join':  {enabled:true, message: "GROUP_JOIN"},
        'group-leave': {enabled:true, message: "GROUP_LEAVE"},

        /* MESSAGE BOARDS */
        'message-board-create-discussion': {enabled:true, message: "MESSAGE_BOARD_CREATE_DISCUSSION"}
    }};

    // Setup our FacebookConnect script
    Ka.FacebookConnect = {
        version: "2.2b",
        ready: false,

        ifUserConnected: function(cbLoggedin, cbNotLoggedIn){
            FB.Connect.ifUserConnected(cbLoggedin,cbNotLoggedIn);
        },

        init: function(settings) {
            // Begin Initialization
            Ka.log("Initializing Facebook Connect...");
            Ka.events.dispatchEvent("fbc-before-init");

            var fbcSettings = Ka.Settings.FacebookConnect,
                fbc = Ka.FacebookConnect;

            // Save settings
            fbcSettings.appId = settings.appId;
            fbcSettings.APIKEY = settings.apiKey;
            fbcSettings.BUTTON = settings.buttonHtml;
            fbcSettings.autoChecked = settings.autoChecked;
            fbcSettings.debugLogLevel = settings.debugLogLevel || 0;

            // Listen for events
            if (Ka.Info.USERID != '') {
                Ka.events.listen('play-page-load', 					fbc.handlePlayPage);
                Ka.events.listen('profile-page-load', 				fbc.handleProfilePage);
                Ka.events.listen('group-page-load',					fbc.handleGroupPage);

                Ka.events.listen('mb-create-discussion-page-load',	fbc.handleCreateDiscussionPageLoad);
                Ka.events.listen('mb-discussion-list-page-load',	fbc.handleDiscussionListPageLoad);

                Ka.events.listen('media-upload-success',			fbc.mediaUploadSuccess);
                Ka.events.listen('media-add-success',				fbc.mediaUploadSuccess);

                Ka.events.listen('add-photo-page-load', 			fbc.handleAddPhotoPage);
                Ka.events.listen('add-video-page-load', 			fbc.handleAddVideoPage);
                Ka.events.listen('add-audio-page-load', 			fbc.handleAddAudioPage);
                Ka.events.listen('add-blog-page-load', 				fbc.handleAddBlogPage);
                Ka.events.listen('media-sets-page-load', 			fbc.handleAddMediaSetsPage);
                Ka.events.listen('register-user-success', 			fbc.handleSuccessfulSignup);

            } else {
                Ka.events.listen('register-user-page-load',			fbc.handleRegisterUserPageLoad);
            }

            Ka.events.listen("fbc-on-facebook-ready", function(){
                Ka.FacebookConnect.ready = true;
                Ka.log("Finished Initializing Facebook Connect!");
                Ka.events.dispatchEvent("fbc-after-init", {});
            });

            // Prepare the facebook init code
            window.fbAsyncInit = function() {
                FB.init({
                    oauth:     true,
                    channelUrl: location.protocol + "//" + Ka.Info.DOMAINNAME + "/fb_channel.jsp",
                    appId      : fbcSettings.appId,
                    display    : "iframe",
                    status     : true, // check login status
                    cookie     : true, // enable cookies to allow the server to access the session
                    xfbml      : true,  // parse XFBML,
                    logging    : true
                });

                Ka.events.dispatchEvent("fbc-on-facebook-ready");
            };


            var fbLoader = function(){
                // Load FB code
                if (!window.FB) {

                    // FB code is not loaded, lets load it now.
                    (function(d){
                        var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
                        js = d.createElement('script'); js.id = id; js.async = true;
                        js.src = "//connect.facebook.net/en_US/all.js";
                        d.getElementsByTagName('head')[0].appendChild(js);
                    }(document));
                }
            };


            // Create fb root
            if ($j("#fb-root").length == 0) {
                $j(function(){
                    Ka.log("[FBC] Creating fb-root element")
                    $j("<div />", {id: "fb-root"}).appendTo("#ka_mainContainer");
                    fbLoader();
                });
            } else {
                fbLoader();
            }



        },

        /* Checks if the FB Connect box is selected  */
        isFeatureSelected: function(featureId){
            return $j('#ka-fbconnect-feature-' + featureId +' input.ka_fb_connect')[0].checked;
        },

        /* Generates the button, wrapped in a div */
        generateButton: function(featureId){
            var fbc = Ka.Settings.FacebookConnect;
            var $button = $j("<div id='ka-fbconnect-feature-" + featureId + "'>"
                + (fbc.actions[featureId].buttonHtml || fbc.BUTTON)
                + "</div>");
            if(Ka.Settings.FacebookConnect.autoChecked) {
                $button = $button.find('input.ka_fb_connect').attr('checked','checked').end();
            }
            return $button;
        },

        /* added facebook source to url for tracking purposes */
        addFacebookURLRef: function(url) {
            if(typeof url == "undefined") {return "";}
            return url.indexOf("?")>=0
                ? url += "&utm_source=facebook"
                : url += "?utm_source=facebook";
        },

        /* generates the site url */
        getSiteUrl: function(){
            return this.addFacebookURLRef(Ka.Settings.FacebookConnect.siteUrl || Ka.Info.SERVERROOT + "/home?as=" + Ka.Info.AFFILIATESITEID);
        },

        /* Generates the strings from i18n */
        generateStoryData: function(feature, substituteData){
            Ka.log("[FBC] Generating story data", substituteData);

            // Add common data
            substituteData.siteName = substituteData.siteName || Ka.Info.SITENAME;
            substituteData.mediaUrl = this.addFacebookURLRef(substituteData.mediaUrl || window.location.href);
            substituteData.siteUrl = this.getSiteUrl();

            // Generate strings
            var storyCaption =	Ka.Messages.replaceTokens(Ka.Messages.FacebookConnect[feature.message],  substituteData),
                storyTitle =    Ka.Messages.replaceTokens((Ka.Messages.FacebookConnect[feature.message + '_TITLE'] || Ka.Messages.FacebookConnect.DEFAULT_STORY_TITLE), substituteData),
                storyLinkText = Ka.Messages.replaceTokens(Ka.Messages.FacebookConnect.ACTION_LINK_TEXT,  substituteData),
                storyPicture = substituteData.mediaThumbnail,
                pathToMedia =   {
                    type: 	"image",
                    src: 	this.addFacebookURLRef(substituteData.mediaThumbnail),
                    href: 	this.addFacebookURLRef(substituteData.mediaUrl)
                },
                hasImages =		substituteData.mediaThumbnail && substituteData.mediaUrl,
                dialogPrompt = 	Ka.Messages.replaceTokens(Ka.Messages.FacebookConnect.DIALOG_PROMPT,  substituteData),
                storyLink = 	this.addFacebookURLRef(substituteData.storyLink || window.location.href);

            var actionLinks = [
                { 'name' : Ka.Info.SITENAME, 'link' : this.getSiteUrl() }
            ];

            var defaultMessage = Ka.Messages.replaceTokens((Ka.Messages.FacebookConnect[feature.message + '_DEFAULT'] || ""),  substituteData);

            // Log and return
            var storyData = {
                message: defaultMessage,
                name: storyTitle,
                caption: storyCaption,
                description: storyTitle,
                picture: storyPicture,
                link: storyLink,
                actions: actionLinks,
                user_message_prompt: "Share your thoughts on this..."
            };

            return storyData;
        },

        createJsonCookie: function(feature, enabled) {
            var cookieValue = "({featureIdentifier: '{0}', enabled: {1}})".format(feature, enabled);
            Ka.Cookie.create('fbConnectFeature', cookieValue, 0.1);
        },

        getJsonCookie: function(feature, enabled) {
            return eval(Ka.Cookie.read('fbConnectFeature'));
        },

        inviteFriends: function(substituteData){
            Ka.log("[FBC] Loading inviteFriends");

            substituteData = substituteData || {};
            substituteData.siteName =  substituteData.siteName || Ka.Info.SITENAME;
            substituteData.siteUrl = this.getSiteUrl();


        },

        publish: function(storyData){
            if (!Ka.FacebookConnect.ready) {
                Ka.log("[FBC] Not initialized yet, waiting for after init event to publish")
                Ka.events.listen("fbc-after-init", function(){
                    Ka.FacebookConnect.publish(storyData);
                });
                return;
            }

            Ka.log("[FBC] Publishing Story: ", storyData);


            FB.ui({
                    method: 'feed',
                    message: 'getting educated about Facebook Connect',
                    name: storyData.name,
                    caption: storyData.caption,
                    description: storyData.description,
                    link: storyData.link,
                    picture: storyData.picture,
                    actions: storyData.actions,
                    user_message_prompt: 'Share your thoughts about this...'
                },
                function(response) {
                    if (response && response.post_id) {
                        Ka.events.dispatchEvent("fbc-story-published", {response: response, storyData: storyData})
                    } else {
                        Ka.events.dispatchEvent("fbc-story-not-published", {response: response, storyData: storyData})
                    }
            });
        },

        /* PLAY PAGE */
        handlePlayPage: function() {
            Ka.log("[FBC] Loading handlePlayPage");
            /* comments */
            var commentFeatureIdentifier = "media-" + Ka.Info.MEDIATYPE.toLowerCase() + "-commenting";
            var commentFeature = Ka.Settings.FacebookConnect.actions[commentFeatureIdentifier];

            if (commentFeature.enabled) {
                $j('#ka_sendButton').before(Ka.FacebookConnect.generateButton(commentFeatureIdentifier));
                Ka.events.listen('play-page-after-add-comment', function(data) {
                    Ka.log("[FBC] Executing " + commentFeatureIdentifier);
                    if (!data.success || !Ka.FacebookConnect.isFeatureSelected(commentFeatureIdentifier)) {return;}
                    var featureData = {
                        mediaTitle: Ka.Info.MEDIANAME,
                        mediaThumbnail: (Ka.Info.MEDIAPATHTOPREVIEW.length > 0)
                            ? Ka.Info.AUDIOPHOTOSERVERPATH + Ka.Info.MEDIAPATHTOPREVIEW
                            : Ka.Info.PATHTOPREVIEW
                    };

                    // this timer is a nasty hack to avoid the DWR callback issue
                    setTimeout(function(){
                        Ka.FacebookConnect.publish(Ka.FacebookConnect.generateStoryData(commentFeature, featureData));
                    }, 1);
                });
            }

            /* favoriting */
            var addFavoriteFeatureIdentifier = "media-add-favorite";
            var addFavoriteFeature = Ka.Settings.FacebookConnect.actions[addFavoriteFeatureIdentifier];

            if (addFavoriteFeature.enabled) {
                Ka.FacebookConnect.generateButton("media-add-favorite").insertAfter('#favoriteArea');
                Ka.events.listen('play-page-after-add-favorite', function(data) {
                    if (!data.success || !Ka.FacebookConnect.isFeatureSelected(addFavoriteFeatureIdentifier)) {return;}

                    Ka.log("[FBC] Executing " + addFavoriteFeatureIdentifier);
                    var featureData = {
                        mediaTitle: Ka.Info.MEDIANAME,
                        mediaThumbnail: Ka.Info.AUDIOPHOTOSERVERPATH + Ka.Info.MEDIAPATHTOPREVIEW,
                        mediaType: Ka.Info.MEDIATYPE.toLowerCase()
                    };

                    // this timer is a nasty hack to avoid the DWR callback issue
                    setTimeout(function(){
                        Ka.FacebookConnect.publish(Ka.FacebookConnect.generateStoryData(addFavoriteFeature, featureData));
                    }, 1);
                });
            }
        },

        /* PROFILE PAGE */
        handleProfilePage: function() {
            Ka.log("[FBC] Loading handleProfilePage");

            var featureIdentifier = "member-profile-commenting";
            var feature = Ka.Settings.FacebookConnect.actions[featureIdentifier];

            if (feature.enabled) {
                Ka.FacebookConnect.generateButton(featureIdentifier).insertAfter('#ka_profileCommentBody');
                Ka.events.listen('profile-page-after-add-comment', function(data) {
                    if (!data.approved || !Ka.FacebookConnect.isFeatureSelected(featureIdentifier)) {return;}

                    Ka.log("[FBC] Executing " + featureIdentifier);
                    var featureData = {
                        mediaTitle: Ka.Info.PROFILENAME,
                        mediaThumbnail: Ka.Info.AUDIOPHOTOSERVERPATH  + Ka.Info.Profile.PHOTOTHUMBNAIL
                        //description:
                    };

                    // this timer is a nasty hack to avoid the DWR callback issue
                    setTimeout(function(){
                        Ka.FacebookConnect.publish(Ka.FacebookConnect.generateStoryData(feature, featureData));
                    }, 1);
                });
            }
        },

        /* MESSAGE BOADS */
        handleCreateDiscussionPageLoad: function() {
            Ka.log("[FBC] Loading handleCreateDiscussionPageLoad");

            featureIdentifier = "message-board-create-discussion";
            feature = Ka.Settings.FacebookConnect.actions[featureIdentifier];

            if (feature.enabled) {
                Ka.Cookie.erase('fbConnectFeature');
                Ka.FacebookConnect.generateButton(featureIdentifier).insertAfter('#ka_DiscussionName');
                Ka.events.listen('mb-create-discussion-before-submit', function() {
                    if (!Ka.FacebookConnect.isFeatureSelected(featureIdentifier)) {return;}

                    Ka.log("[FBC] Executing " + featureIdentifier);
                    Ka.FacebookConnect.createJsonCookie(featureIdentifier,true);
                });
            }
        },
        handleDiscussionListPageLoad: function() {
            Ka.log("[FBC] Loading handleDiscussionListPageLoad");

            featureIdentifier = "message-board-create-discussion";
            feature = Ka.Settings.FacebookConnect.actions[featureIdentifier];

            if (feature.enabled) {
                var cookie = Ka.FacebookConnect.getJsonCookie(featureIdentifier);
                if (!cookie) {return;}

                Ka.log("[FBC] Executing " + featureIdentifier);
                if(cookie.enabled && cookie.featureIdentifier === featureIdentifier) {
                    if (!Ka.Info.MessageBoard.AUTOAPPROVENEWPOSTS) {return;}

                    var path = "/service/displayDiscussionThreads.kickAction?as={0}&w={1}&d={2}";
                    var featureData = {
                        mediaTitle: Ka.Info.MessageBoard.NEWDISCUSSIONTHREADTITLE,
                        mediaUrl: location.protocol + location.host + path.format(Ka.Info.AFFILIATESITEID, Ka.Util.getLocationParam("w"), Ka.Info.MessageBoard.NEWDISCUSSIONTHREADID)
                    };

                    Ka.FacebookConnect.publish(Ka.FacebookConnect.generateStoryData(feature, featureData));
                }
                Ka.Cookie.erase('fbConnectFeature');
            }
        },

        /* GROUPS */
        handleGroupPage: function(data) {
            Ka.log("[FBC] Loading handleGroupPage");

            var feature, featureIdentifier;
            if (data.isGroupMember) {
                /* GROUP COMMENT - disabled because of silly ajax comment box on groups page! :(
                 featureIdentifier = "group-commenting";
                 feature = Ka.Settings.FacebookConnect.actions[featureIdentifier];
                 if (feature.enabled) {
                 Ka.FacebookConnect.generateButton(featureIdentifier).appendTo('#ka_shoutBoxArea');
                 Ka.events.listen('group-page-after-add-comment', function(data) {
                 if (!data.success || !Ka.FacebookConnect.isFeatureSelected(featureIdentifier)) return;
                 var featureData = {
                 mediaTitle: Ka.Info.CLUBNAME,
                 }
                 Ka.FacebookConnect.publish(Ka.FacebookConnect.generateStoryData(feature, featureData));
                 });
                 }*/


                /* GROUP LEAVE */
                featureIdentifier = "group-leave";
                feature = Ka.Settings.FacebookConnect.actions[featureIdentifier];
                if (feature.enabled) {
                    Ka.FacebookConnect.generateButton(featureIdentifier).insertAfter('#ka_joinButton');
                    Ka.events.listen('group-page-after-leave', function(data) {
                        if (!data.success || !Ka.FacebookConnect.isFeatureSelected(featureIdentifier)) {return;}

                        Ka.log("[FBC] Executing " + featureIdentifier);
                        var featureData = {
                            mediaTitle: Ka.Info.CLUBNAME
                        };

                        Ka.FacebookConnect.publish(Ka.FacebookConnect.generateStoryData(feature, featureData));
                    });
                }
            } else {
                /* GROUP JOIN */
                featureIdentifier = "group-join";
                feature = Ka.Settings.FacebookConnect.actions[featureIdentifier];
                if (feature.enabled) {
                    Ka.FacebookConnect.generateButton(featureIdentifier).insertAfter('#ka_joinButton');
                    Ka.events.listen('group-page-after-join', function(data) {
                        if (!data.success || !Ka.FacebookConnect.isFeatureSelected(featureIdentifier)) {return;}

                        Ka.log("[FBC] Executing " + featureIdentifier);
                        var featureData = {
                            mediaTitle: Ka.Info.CLUBNAME
                        };

                        Ka.FacebookConnect.publish(Ka.FacebookConnect.generateStoryData(feature, featureData));
                    });
                }
            }
        },

        /* new member registration */
        handleRegisterUserPageLoad: function() {
            Ka.log("[FBC] Loading handleRegisterUserPageLoad");

            featureIdentifier = "member-join-community";
            feature = Ka.Settings.FacebookConnect.actions[featureIdentifier];

            if (feature.enabled) {
                Ka.Cookie.erase('fbConnectFeature');
                Ka.FacebookConnect.generateButton(featureIdentifier).prependTo('#ka_joinSubmit');

                Ka.events.listen('register-user-page-before-submit', function(){
                    if (!Ka.FacebookConnect.isFeatureSelected(featureIdentifier)) {return;}

                    Ka.log("[FBC] Executing " + featureIdentifier);
                    Ka.FacebookConnect.createJsonCookie(featureIdentifier,true);
                });
            }
        },


        handleSuccessfulSignup: function() {
            Ka.log("[FBC] Loading handleSuccessfulSignup");

            featureIdentifier = "member-join-community";
            feature = Ka.Settings.FacebookConnect.actions[featureIdentifier];

            if (feature.enabled) {
                var cookie = Ka.FacebookConnect.getJsonCookie(featureIdentifier);
                if (!cookie) {return;}
                if(cookie.enabled && cookie.featureIdentifier === featureIdentifier) {

                    var path = "/service/displayKickPlace.kickAction?as={0}&u={1}";
                    var mediaUrl = location.protocol + "//" + location.host + path.format(
                        Ka.Info.AFFILIATESITEID,
                        Ka.Info.USERID);

                    Ka.log("[FBC] Executing " + featureIdentifier);
                    var featureData = {
                        mediaUrl: mediaUrl,
                        mediaThumbnail: Ka.Info.AUDIOPHOTOSERVERPATH + Ka.Info.USERPHOTO,
                        storyLink: mediaUrl
                    };

                    Ka.FacebookConnect.publish(Ka.FacebookConnect.generateStoryData(feature, featureData));
                }
                Ka.Cookie.erase('fbConnectFeature');
            }
        },

        /* media uploads */
        mediaUploadSuccess: function(activeMediaDetails){
            Ka.log("[FBC] Loading mediaUploadSuccess");

            if(activeMediaDetails.mediaType == "TB") {activeMediaDetails.mediaType = "blog";}

            featureIdentifier = "add-" + activeMediaDetails.mediaType.toLowerCase();
            feature = Ka.Settings.FacebookConnect.actions[featureIdentifier];

            if (feature.enabled) {

                var cookie = Ka.FacebookConnect.getJsonCookie(featureIdentifier);
                if (!cookie) {return;}
                if(cookie.enabled && cookie.featureIdentifier === featureIdentifier) {
                    var path = "/_{0}/{1}/{2}/{3}.html";
                    var mediaUrl = location.protocol + "//" + location.host + path.format(
                        Ka.String.cleanUpRestUrl(activeMediaDetails.mediaName),
                        activeMediaDetails.mediaType.toLowerCase(),
                        activeMediaDetails.mediaId,
                        Ka.Info.AFFILIATESITEID);

                    Ka.log("[FBC] Executing " + featureIdentifier);
                    var featureData = {
                        mediaTitle: activeMediaDetails.mediaName,
                        mediaUrl: mediaUrl,
                        mediaThumbnail: Ka.Info.AUDIOPHOTOSERVERPATH + activeMediaDetails.pathToPreview,
                        storyLink: mediaUrl
                    };

                    Ka.FacebookConnect.publish(Ka.FacebookConnect.generateStoryData(feature, featureData));
                }
                Ka.Cookie.erase('fbConnectFeature');
            }
        },

        handleAddMediaSetsPage: function() {
            Ka.log("[FBC] Loading handleAddMediaSetsPage");

            // we need to listen to events on both upload page and my list page
            featureIdentifier = "add-set";
            feature = Ka.Settings.FacebookConnect.actions[featureIdentifier];

            if (feature.enabled) {
                Ka.Cookie.erase('fbConnectFeature');
                Ka.FacebookConnect.generateButton(featureIdentifier).prependTo('#ka_setSubmit');

                Ka.events.listen('media-sets-before-submit', function() {
                    if (!Ka.FacebookConnect.isFeatureSelected(featureIdentifier)) {return;}
                    Ka.log("[FBC] Executing " + featureIdentifier);
                    Ka.FacebookConnect.createJsonCookie(featureIdentifier,true);
                });
            }
        },
        handleAddBlogPage:  function() {Ka.FacebookConnect.handleMediaUploadPage('blog'); },
        handleAddPhotoPage: function() {Ka.FacebookConnect.handleMediaUploadPage('photo');},
        handleAddVideoPage: function() {Ka.FacebookConnect.handleMediaUploadPage('video');},
        handleAddAudioPage: function() {Ka.FacebookConnect.handleMediaUploadPage('audio');},
        handleMediaUploadPage: function(mediaType){
            Ka.log("[FBC] Loading handleMediaUploadPage");

            // we need to listen to events on both upload page and my list page
            featureIdentifier = "add-" + mediaType;
            feature = Ka.Settings.FacebookConnect.actions[featureIdentifier];

            if (feature.enabled) {
                Ka.Cookie.erase('fbConnectFeature');
                Ka.FacebookConnect.generateButton(featureIdentifier).prependTo('#ka_' + mediaType + 'Submit');

                Ka.events.listen('add-' + mediaType + '-page-before-submit', function() {
                    if (!Ka.FacebookConnect.isFeatureSelected(featureIdentifier)) {return;}
                    Ka.log("[FBC] Executing " + featureIdentifier);
                    Ka.FacebookConnect.createJsonCookie(featureIdentifier,true);
                });
            }
        }
    };

    // lets wait for it to be loaded, and then fire an event
    var waitForFB = setInterval(function(){
        if (!window.FB) {
            return;
        }

        clearInterval(waitForFB);
        Ka.events.dispatchEvent("fb-all-loaded")
    }, 100);
})();

Ka.log = function (){
    if(Ka.Settings.enableLogging && !!window.console){
        try{
            if (navigator.userAgent.indexOf("Chrome")) {
                console.log(arguments);
            } else {
                console.log.apply(this,arguments);
            }
        }
        catch(ex){}
    }
}

Ka.log("Facebook Connect Loaded");

