/*
 * fbFlashBridge - Facebook Connect Flash Bridge
 * 
 * Copyright (c) 2009 Pieter Michels
 *
 * ---------------------------------------------
 *
 * Custom javascript calls
 * 
 * FBFlashBridgeLogIn
 * FBFlashBridgeLogOut
 * FBFlashBridgeSetStatus
 * FBFlashBridgeGetFriendsList
 * FBFlashBridgeGetUsersInfo
 * FBFlashBridgePromptPermission
 * FBFlashBridgePublishFeedStory
 * FBFlashBridgeShowShare
 * FBFlashBridgeUserInfo
 * FBFlashBridgeInviteFriends
 *
 * //Robin
 * FBFlashBridgeAddFriend
 *
 * Custom event listening
 *
 * FBFlashBridgeListener("LOGGED_IN", onLoggedIn); 
 * FBFlashBridgeListener("LOGGED_OUT", onLoggedOut); 
 * FBFlashBridgeListener("STATUS_SET", onStatusSet); 
 * FBFlashBridgeListener("FRIENDS_LIST", onFriendsList); 
 * FBFlashBridgeListener("USERS_INFO", onUsersInfo);
 * FBFlashBridgeListener("USER_INFO", onUserInfo);
 * FBFlashBridgeListener("ADD_FRIEND", onAddFriend); 
 */

var sAppURL = "";
var sAppKey = "";

var api;
var friendResult;
var userResult;
var usersResult;
var photoResult;
var albumResult;
var oFlash = null;
var isFlashReady = false;
var isLoggedIn = false;


//***********************************************************************************************************//

///////////////////////
function FBFlashBridgeInviteFriends()
{
	trace("INVITE FRIENDS");

	// FB.Connect.inviteConnectUsers();
	FB.ensureInit(function() 
	{
        var url = "http://robinisaksson.com/fb/2";
        var dialog = new FB.UI.FBMLPopupDialog('Invite your friends to join', '');
        var fbml = '<fb:fbml>'
         + '<fb:request-form onsubmit=\'return false;\' action="' + url
         + '" method="POST" invite="true" type="this" content="Visit ' + url
         + '<fb:req-choice url=\'' + url  + '\' label=\'Visit RobinIsaksson.com\' />">'
         + '<fb:multi-friend-selector rows="2" showborder="false" actiontext="Invite your friends"/>'
         + '</fb:request-form></fb:fbml>';

        dialog.setFBMLContent(fbml);
        dialog.setContentWidth(760);
        dialog.setContentHeight(400);
        dialog.show();
    });
}


function FBFlashBridgeGetAlbum(uid) 
{
	trace("GET ALBUM");
	
	api.photos_getAlbums(uid, null, function(result, ex) 
	{					
		albumResult = result;
		
		trace("ALBUM");
		
		FBFlashBridgeDispatcher("ALBUM");
		
		FBFlashBridgeFlashDispatcher("onAlbum", albumResult);
	});

  //api.photos_get(api.get_session().uid, null, 2168954000534143302, null, callback_getPhoto);
		
}

function FBFlashBridgeGetPhotos(uid, aid) 
{
	trace("GET PHOTOS");
	
	//api.photos_get(null, aid, null, function(result, ex) 
	api.photos_get(uid, null, null, function(result, ex) 	
	{					
		photoResult = result;
		
		trace("PHOTOS");
		
		FBFlashBridgeDispatcher("PHOTOS");
		
		FBFlashBridgeFlashDispatcher("onPhotos", photoResult);
		
	});

  //api.photos_get(api.get_session().uid, null, 2168954000534143302, null, callback_getPhoto);
  
  /*
  
  api.photos_get('2541844', null, null, function(photos, exception) {
      for (var i = 0; i < photos.length; i++) {
        var photo = photos[i];
        var src = photo.src_big;
        jQuery('<img />').attr({src: src}).appendTo('#display');
        display('<br>');
      }
    });

  */
		
}

/////////////////////

function FBFlashBridgeSetStatus(status)
{
	trace("SETTING STATUS (" + status + ")");

	api.users_setStatus(status, false, false, function()
	{
		trace("STATUS_SET");
		
		FBFlashBridgeDispatcher("STATUS_SET");
		
		FBFlashBridgeFlashDispatcher("onStatusSet");
	});
}

function FBFlashBridgeUserInfo(userId, arrProfileData)
{
	trace("GETTING USER INFO OF LOGGED IN USER OR USER WITH GIVEN UID");

	// ["timezone", "status", "sex", "proxied_email", "profile_url", "pic_square_with_logo", "pic_square", "pic_small_with_logo", "pic_small", "pic_big_with_logo", "pic_big", "pic_with_logo", "pic", "name", "first_name", "last_name", "is_app_user", "hometown_location", "birthday", "about_me", "uid"]
	
	api.users_getInfo([userId > 0 ? userId : api._session.uid], arrProfileData, function(result, ex) 
	{	
		userResult = result[0];

		trace("USER_INFO");
		
		FBFlashBridgeDispatcher("USER_INFO");
		
		FBFlashBridgeFlashDispatcher("onUserInfo", userResult);
	});
}

function FBFlashBridgeGetFriendsList()
{
	api.friends_get(null, function(result, ex) 
	{					
		friendResult = result;
		
		trace("FRIENDS_LIST");
		
		FBFlashBridgeDispatcher("FRIENDS_LIST");
		
		FBFlashBridgeFlashDispatcher("onFriendsList", friendResult);
	});
}


function FBFlashBridgeGetUsersInfo(arrUsers, arrProfileData)
{
	api.users_getInfo(arrUsers, arrProfileData, function(result, ex) 
	{	
		usersResult = result;

		trace("USERS_INFO");
		
		FBFlashBridgeDispatcher("USERS_INFO");
		
		FBFlashBridgeFlashDispatcher("onUsersInfo", usersResult);
	});
}

function FBFlashBridgeGetAppUsers()
{
	api.friends_getAppUsers(function(result, ex) 
	{					
		usersResult = result;
		
		trace("APP_USERS");
		
		FBFlashBridgeDispatcher("APP_USERS");
		
		FBFlashBridgeFlashDispatcher("onAppUsers", usersResult);
	});
}

function FBFlashBridgePromptPermission(permission) 
{
	FB.ensureInit(function() 
	{
    	FB.Connect.showPermissionDialog(permission, callback, true);
    	
    	function callBack () {
    			
    	}
	});
}



function FBFlashBridgePublishFeedStory(templateBundleId, commentData) 
{
	FB.ensureInit(function() 
	{
				var message = 'Kolla mitt nya CV!'; 
				var attachment = { 'name': 'Du hittar mitt framtids-CV h&auml;r', 'href': commentData, 'caption': '{*actor*} funderar p&aring; att utbilda sig.' , 'description': 'Vad vill du helst jobba med?', 'media': [{ 'type': 'image', 'src': 'http://framtidscv.se/assets/media/HB_logo_fb.png', 'href': 'http://framtidscv.se'}] }; 
				var action_links = [{'text':'Recaption this', 'href':commentData}];
				
				var question = 'Dela med dig utav ditt nya CV' 
				
				FB.Connect.streamPublish(message, attachment, action_links, null, question); 
				
				//streamPublish(String user_message,  Object attachment,  Object action_links,  String target_id,  String user_message_prompt,  Function callback,  Boolean auto_publish,  String actor_id)
				
        //FB.Connect.showFeedDialog(parseInt(templateBundleId), commentData, null, null, FB.FeedStorySize.shortStory, FB.RequireConnect.promptConnect);
	});
}

/*
function FBFlashBridgePublishFeedStory(templateBundleId, commentData) 
{
	FB.ensureInit(function() 
	{
        FB.Connect.showFeedDialog(parseInt(templateBundleId), commentData, null, null, FB.FeedStorySize.shortStory, FB.RequireConnect.promptConnect);
	});
}
*/

function FBFlashBridgeShowShare(link)
{
	FB.Connect.showShareDialog(link, function()
	{
		//alert("Share Test");
	});
}

//***********************************************************************************************************//

function FBFlashBridgeLogOut()
{
	FB.Connect.logout(function() 
	{ 
		trace("LOGGED_OUT");
		
		FBFlashBridgeDispatcher("LOGGED_OUT");
		
		FBFlashBridgeFlashDispatcher("onLoggedOut");
	});
}

function FBFlashBridgeLogIn()
{
	FB.Connect.requireSession(function() 
	{
		trace("LOG IN READY");
		
		FBFlashBridgeLoggedIn();
	});
}

function FBFlashBridgeLoggedIn()
{
	api = FB.Facebook.apiClient;
		
	trace("LOGGED_IN");
	
	isLoggedIn = true;

	FBFlashBridgeDispatcher("LOGGED_IN");
	
	FBFlashBridgeFlashDispatcher("onLoggedIn", api._session);
}

function FBFlashBridgeOnLoad() 
{
	FB.ensureInit(function() 
	{
		FB.Facebook.get_sessionState().waitUntilReady(function(session) 
		{
			inspect(session);
			
			if(session)
				FBFlashBridgeLoggedIn();
		});
	});
}


//***********************************************************************************************************//	

if(!("console" in window) || !("firebug" in console))
{
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];

    window.console = {};

    for(var i = 0; i < names.length; ++i) window.console[names[i]] = function() {};
}

function trace(msg)
{
	// alert(msg);
	
	if(console)	
		console.debug(msg);
}

function inspect(obj)
{
	if(console)	
		console.dir(obj);
}

//***********************************************************************************************************//	

window.onload = function() { FBFlashBridgeOnLoad(false); };

//***********************************************************************************************************//

function FBFlashBridgeDispatcher(eventType, data)
{
	$(document).trigger(eventType, data);
}	

function FBFlashBridgeListener(eventType, func)
{
	$(document).bind(eventType, function(e, data) { func(data); });
}

function FBFlashBridgeFlashDispatcher(func)
{
	if(oFlash && isFlashReady) // && typeof obj.JStoASviaExternalInterface != "undefined")
	{		
		if(arguments.length > 1)
			oFlash[func](Array.prototype.slice.call(arguments).slice(1)[0]);
		else
			oFlash[func]();
	}
}

function FBFlashBridgeInit(appKey, appURL, flashObj)
{
	sAppKey = appKey;
	sAppURL = appURL;

	oFlash = flashObj;
	
	FB.init(sAppKey, sAppURL);
}

function FBFlashBridgeFlashLoaded()
{
	trace("FLASH LOADED");
	
	isFlashReady = true;
	
	if(isLoggedIn) // NOTIFY FLASH
	{
		trace("FB WAS ALLREADY LOGGED IN");
		
		FBFlashBridgeFlashDispatcher("onLoggedIn", api._session);
	}
}

//***********************************************************************************************************//
