			
			/**
			*	Don't forget to init in the main app html	
			*
			*	var API_KEY = 'blahblahblah';			
			*	FB.init( API_KEY, 'xd_receiver.htm' );
			*/
			
			
			/**
			* Start the Facebook login process
			* @
			*/
			function login( permissions )
			{
				//alert('login: ' + permissions);
				
				FB.login(loginComplete, {perms:permissions});
			}
			
			/** 
             * Facebook connect login has been completed, successful or not
             */
            function loginComplete( response ) 
            {
				//alert('loginComplete: ' + response.session);
				
				myResponse = response;
				  
				if(response.session) 
				{
					if(response.perms)
					{
						// user is logged in and granted some permissions.
						// perms is a comma separated list of granted permissions
					}
					else
					{
						// user is logged in, but did not grant any permissions
					}
					
					var session = response.session;
					var parameters = {
						apiKey: 		API_KEY,
						expires: 		session.expires,
						secret: 		session.secret,
						sessionKey:	 	session.session_key,
						sig: 			session.sig,
						uid: 			session.uid,
						permissions: 	response.perms
					};
					
					swfDispatcher( 'loginComplete', parameters );
				}
				else
				{
					// user is not logged in
					loginCancelled();
				}
				
				
            }
            
            /** 
             * Facebook connect login has been completed, successful or not
             */
            function loginCancelled() 
            {
            	//alert('loginCancelled');
            	
            	swfDispatcher( 'loginCancelled' );
            }
            
            function streamPublish( attachment, action_links, user_message_prompt )
            {
            	FB.ui(
            		{
            			method: 				'stream.publish',
            			message: 				user_message_prompt,
            			attachment: 			attachment,
            			action_links:			action_links,
            			user_message_prompt:	user_message_prompt
            		},
            		streamPublishComplete
            	);
            }
            
            function streamPublishComplete( response )
            {
            	swfDispatcher( 'streamPublishComplete', response );
            }
            
            
            /**
            * ...
            */
            function showDialog( title, fbmlContent, usePopup )
			{
				//alert( 'exec showDialog' );
				
				//usePopup = true;		// debug
				
			 	fbmlContent = fbmlContent.replace( '{CURRENT_PAGE}', location.href );
			 	var dialog = {
				    method: 'fbml.dialog',
				    display: (usePopup) ? 'popup' : 'iframe', 		// force popup mode
				    fbml: fbmlContent,
				    //width: 745,		// fb docs say this should work, but don't yet
				    //height: 620		// bug report here: http://bugs.developers.facebook.com/show_bug.cgi?id=11104
				    					// forum post here: http://forum.developers.facebook.com/viewtopic.php?pid=243956
				    size: {width: 745, height: 620}		// this forces a 964x300 window, still buggy but better than the alternative 
				  };
				  FB.ui(dialog, showDialogComplete);
			}
			
			function showDialogComplete( response )
            {
            	// no response provided
            }
			
			function bookmark()
			{
				FB.ui({ method: 'bookmark.add' }, bookmarkComplete);
			}
            
            function bookmarkComplete( response )
			{
				swfDispatcher( 'bookmarkComplete', ( response.bookmarked == 1 ) ? true : false );
			}
            
			/**
			* Call actionscript ExternalInterface methods
			*/
            function swfDispatcher( func )
			{
				if( arguments.length > 1 )
				{
					swfobject.getObjectById( 'swf' )[func]( Array.prototype.slice.call(arguments).slice(1)[0]);
				}
				else
				{
					swfobject.getObjectById( 'swf' )[func]();
				}
			}
			
