/* @author 	Bryan Migliorisi
 * @version 1.2.1
 * 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
 *  
 */
Ka.Messages.FacebookConnect = Ka.Messages.FacebookConnect || {};
Ka.Settings.FacebookConnect = Ka.Settings.FacebookConnect || {actions: null};
FB.initted = false;

Ka.FacebookConnect = {
	version: "1.2.1",
	
	ifUserConnected: function(cbLoggedin, cbNotLoggedIn){
		FB.Connect.ifUserConnected(cbLoggedin,cbNotLoggedIn);	
	},

	init: function(settings) {
		Ka.log("Initializing Facebook Connect...");
		var fbcSettings = Ka.Settings.FacebookConnect,
			fbc = Ka.FacebookConnect;
		
		fbcSettings.APIKEY = settings.apiKey;
		fbcSettings.TEMPLATEBUNDLEID = settings.templateBundleId;
		fbcSettings.BUTTON = settings.buttonHtml;
		fbcSettings.autoChecked = settings.autoChecked;
		fbcSettings.debugLogLevel = settings.debugLogLevel || 0;
		
		this.loadFacebookSession();
		
		if(settings.autoScroll) {
			this.initScroller();
		}
		
		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.log("Finished Initializing Facebook Connect!");
	},
	
	/* initializing automatic scrolling */
	initScroller: function() {
		Ka.log("[FBC] InitScroller");
		this.scrollWait = 0;
		$j(window).scroll(function(){
		    clearTimeout(this.scrollWait);
		    this.scrollWait = setTimeout(function(){
		    	var centered = ($j(window).height() / 2) - ($j('#RES_ID_fb_pop_dialog_table').height() / 2);
		        var scrollTop = $j('html').scrollTop() + centered; 
		        $j('#RES_ID_fb_pop_dialog_table').animate({top: scrollTop});
		    }, 400);
		});
	},
	/* 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 += "&source=facebook"
			: url += "?source=facebook";
	},
	
	/* generates the site url */
	getSiteUrl: function(){
		return this.addFacebookURLRef(Ka.Settings.FacebookConnect.siteUrl || Ka.Info.SERVERROOT + "/service/displayHomePageExperience.kickAction?page=Homepage&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 storyBody =     Ka.Messages.replaceTokens(Ka.Messages.FacebookConnect[feature.message],  substituteData),
			storyTitle =    Ka.Messages.replaceTokens(Ka.Messages.FacebookConnect.SHORT_STORY_TITLE, substituteData),
			storyLinkText = Ka.Messages.replaceTokens(Ka.Messages.FacebookConnect.ACTION_LINK_TEXT,  substituteData),
			pathToMedia =   {src: this.addFacebookURLRef(substituteData.mediaThumbnail), href: this.addFacebookURLRef(substituteData.mediaUrl)},
			hasImages =		substituteData.mediaThumbnail && substituteData.mediaUrl,
			storyLink = 	this.addFacebookURLRef(substituteData.storyLink || window.location.href);
	
		// return object for fbConnect
		var storyData =  {
    		actor: Ka.Info.USERNAME,
            storyLink: storyLink,
            storyLinkText: storyLinkText,
            storyBody: storyBody,
            storyTitle: storyTitle
        };
		
		// Link to an image if we have enough data for it
		if (hasImages) {
			storyData.images = [pathToMedia];
		}
		
		// Log and return
		Ka.log("[FBC] Generated story data: ", storyData);
		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");
		this.loadFacebookSession();
		
		substituteData = substituteData || {};
		substituteData.siteName =  substituteData.siteName || Ka.Info.SITENAME;
		substituteData.siteUrl = this.getSiteUrl();
		
		
		FB.ensureInit(function() {
            FB.Connect.requireSession(function() {
                FB.Facebook.get_sessionState().waitUntilReady(function() {
                	FB.Facebook.apiClient.connect_getUnconnectedFriendsCount(function (o, e) {
        		        if (o > 1) {
        		            FB.Connect.inviteConnectUsers();
        		        } else {
        		        	FB.IFrameUtil.CanvasUtilServer.run(true);
                    	    var _e1 = document.createElement("div");
	                    	    _e1.setAttribute("iframeHeight", "360px");
	                    	    _e1.setAttribute("iframeWidth", "630px");
                    	    
                    	    var _e2 = new(FB.UI.PopupDialog)(Ka.Messages.replaceTokens(Ka.Messages.FacebookConnect.ADD_FRIEND_TITLE, substituteData), _e1, false, false);
	                    	    _e2.setContentWidth(630);
	                    	    _e2.setContentHeight(360);
	                    	    _e2.set_placement(FB.UI.PopupPlacement.center);

                    	    var fbml = ("<fb:fbml>" 
                    	        + "<fb:request-form style=\"width:630px; height:360px;\" action=\"" 
                    	        + document.location.href 
                    	        + "\"\tmethod=\"POST\" invite=\"false\" type=\"{0}\" " 
                    	        + "content=\"{1} <fb:req-choice url='{2}' label='{3}' />\">" 
                    	        + "<fb:multi-friend-selector\tshowborder=\"false\" actiontext=\"{4}\" rows=\"3\" bypass=\"cancel\"\tshowborder=\"false\" />" 
                    	        + "</fb:request-form>" 
                    	        + "</fb:fbml>").format(
                    	        		Ka.Info.SITENAME + " Friend", 
                    	        		Ka.Messages.replaceTokens(Ka.Messages.FacebookConnect.ADD_FRIEND_CONTENT, substituteData),
                    	        		Ka.FacebookConnect.getSiteUrl(),
                    	        		Ka.Messages.replaceTokens(Ka.Messages.FacebookConnect.ADD_FRIEND_CONFIRM, substituteData),
                    	        		Ka.Messages.replaceTokens(Ka.Messages.FacebookConnect.ADD_FRIEND_ACTIONTEXT, substituteData)
                	        		);
                    	    
                    	    _e1.setAttribute("fbml", fbml);
                    	    _e2.show();
                    	    FB_RequireFeatures(["XFBML"], function() {
                    	        var _e3 = new(FB.XFBML.ServerFbml)(_e1);
                    	        FB.XFBML.Host.addElement(_e3);
                    	    });
        		        }
        		    });
                });
            });
        });	
	},

	handleLoggedInUser: function(){
		
	},
	loadFacebookSession: function(){
		Ka.log("[FBC] Loading Facebook session...");
		if (!FB.initted) {
			FB_RequireFeatures(["Api"], function(){ 
				Ka.log("[FBC] Loading with debug level @ ", Ka.Settings.FacebookConnect.debugLogLevel);
				FB.Facebook.init(Ka.Settings.FacebookConnect.APIKEY, "/xd_receiver.htm", { debugLogLevel: Ka.Settings.FacebookConnect.debugLogLevel, ifUserConnected: this.handleLoggedInUser }); 
			}); 
            FB.initted = true;
        }
	},
	
	start: function(fbStoryData) {
		this.loadFacebookSession();
		this.activeFeatureData = fbStoryData;	        

		Ka.log("[FBC] Connecting with FB", fbStoryData);
        FB.ensureInit(function() {
            FB.Connect.requireSession(function() {
                FB.Facebook.get_sessionState().waitUntilReady(function() {
                    FB.Connect.showFeedDialog(
                		Ka.Settings.FacebookConnect.TEMPLATEBUNDLEID, 
                		Ka.FacebookConnect.activeFeatureData,
                		null, null, null, 
                		FB.RequireConnect.promptConnect
            		);
                });
            });
        });	
	},
	
	/* 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.start(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.start(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
	    		};
		        
		        // this timer is a nasty hack to avoid the DWR callback issue
				setTimeout(function(){
					Ka.FacebookConnect.start(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.start(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.start(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.start(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.start(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.start(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.start(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);  
		    });
		}
	}
};
Ka.log("Facebook Connect Loaded");
