/* @author 	Bryan Migliorisi
 * @version 2.0b
 * 
 * 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
 *  
 */
Ka.Messages.FacebookConnect = Ka.Messages.FacebookConnect || {
		 
		DEFAULT_STORY_TITLE: "Es gibt Neues auf ($siteName)", 
		ACTION_LINK_TEXT: "Jetzt bei ($siteName) vorbeischauen!", 
		DIALOG_PROMPT: "Erz&auml;hle deinen Facebook Freunden &uuml;ber ($siteName)", 
		
		ADD_MEDIA_BLOG: "{*actor*} hat den Artikel \"($mediaTitle)\" auf ($siteName) gepostet.", 
		ADD_MEDIA_BLOG_TITLE: "Jetzt den neuen Artikel auf ($siteName) lesen", 
		
		ADD_MEDIA_PHOTO: "{*actor*} hat ein neues Foto mit dem Titel \"($mediaTitle)\" auf ($siteName) hochgeladen.", 
		ADD_MEDIA_PHOTO_TITLE: "Schau dir das neue Foto auf ($siteName) an", 
		
		ADD_MEDIA_AUDIO: "{*actor*} hat eine neue Audio-Datei mit dem Titel \"($mediaTitle)\" auf ($siteName) hochgeladen.", 
		ADD_MEDIA_AUDIO_TITLE: "H&ouml;r dir die neue Audio-Datei auf ($siteName) an", 
		
		ADD_MEDIA_VIDEO: "{*actor*} hat ein neues Video mit dem Titel \"($mediaTitle)\" auf ($siteName) hochgeladen.", 
		ADD_MEDIA_VIDEO_TITLE: "Schau dir das neue Video auf ($siteName) an", 
		
		MEDIA_COMMENT_BLOG: "{*actor*} hat \"($mediaTitle)\", ein Post auf ($siteName), kommentiert.", 
		MEDIA_COMMENT_PHOTO: "{*actor*} hat \"($mediaTitle)\", ein Foto auf ($siteName), kommentiert.", 
		MEDIA_COMMENT_AUDIO: "{*actor*} hat \"($mediaTitle)\", eine Audio-Datei auf ($siteName), kommentiert.", 
		MEDIA_COMMENT_VIDEO: "{*actor*} hat \"($mediaTitle)\", ein Video auf ($siteName), kommentiert.", 
		
		MEDIA_ADD_FAVORITE: "{*actor*} hat \"($mediaTitle)\", ein(e) ($mediaType) auf ($siteName), zu seinen Favoriten hinzugef&uuml;gt.", 
		
		MEMBER_PROFILE_COMMENT: "{*actor*} hat \"($mediaTitle)\" kommentiert, ein anderes Mitglied der ($siteName).", 
		MEMBER_JOIN_COMMUNITY: "{*actor*} ist nun ein Mitglied der ($siteName).", 
		
		GROUP_JOIN: "{*actor*} ist nun Mitglied der \"($mediaTitle)\"-Gruppe auf ($siteName).", 
		GROUP_LEAVE: "{*actor*} hat die \"($mediaTitle)\"-Gruppe auf ($siteName) verlassen.", 
		
MESSAGE_BOARD_CREATE_DISCUSSION: "{*actor*} hat die Diskussion ($mediaTitle) auf ($siteName) gestartet." 
}

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"}
}};

FB.initted = false;

Ka.FacebookConnect = {
	version: "2.0b",
	
	ifUserConnected: function(cbLoggedin, cbNotLoggedIn){
		FB.Connect.ifUserConnected(cbLoggedin,cbNotLoggedIn);	
	},

	init: function(settings) {
		Ka.log("Facebook Connect wird eingerichtet...");
		Ka.events.dispatchEvent("fbc-before-init", {});
		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("Facebook Connect ist jetzt eingerichtet!");
		Ka.events.dispatchEvent("fbc-after-init", {});
	},
	
	/* 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 += "&utm_source=facebook"
			: url += "?utm_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 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),
			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 fbAttachment = {
			name:			storyTitle,
			href: 			storyLink,
			caption: 		storyCaption,
			//description: 	storyBody,
			media:			[],
			action_links: 	[
              	 	{text:	storyLinkText,
              	 	href:	storyLink}
              	]
		}
		var actionLinks = [
        	{ 'text' : Ka.Info.SITENAME, 'href' : this.getSiteUrl() }
    	]; 
		
		var defaultMessage = Ka.Messages.replaceTokens((Ka.Messages.FacebookConnect[feature.message + '_DEFAULT'] || ""),  substituteData);
		
		// Link to an image if we have enough data for it
		if (hasImages) {
			fbAttachment.media.push(pathToMedia);
		}
		
		// Log and return
		Ka.log("[FBC] Generated story data: ", fbAttachment);
		return {
			dialogPrompt: dialogPrompt,
			attachment: fbAttachment,
			actionLinks: actionLinks,
			defaultMessage: defaultMessage
		};
	},
	
	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(fbDialogData) {
		this.loadFacebookSession();
		this.activeFeatureData = fbDialogData;	        

		Ka.log("[FBC] Connecting with FB", fbDialogData);
        FB.ensureInit(function() {
        	function stream_callback(a,b,c) {
        		
        	}
        	FB.Connect.streamPublish(
        		Ka.FacebookConnect.activeFeatureData.defaultMessage, 
    			Ka.FacebookConnect.activeFeatureData.attachment, 
    			Ka.FacebookConnect.activeFeatureData.actionLinks, 
    			null,
    			Ka.FacebookConnect.activeFeatureData.dialogPrompt,
                stream_callback
            );
        });	
	},
	
	/* 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
	    			//description: 
	    		};
		        
		        // 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 geladen");



