/*
 * fbFlashBridge - Facebook Connect Flash Bridge
 * 
 * Copyright (c) 2009 Pieter Michels
 *
 * ---------------------------------------------
 *
 * Custom javascript calls
 * 
 * FBFlashBridgeLogIn
 * FBFlashBridgeLogOut
 * FBFlashBridgeSetStatus
 * FBFlashBridgeGetCurrentStatus
 * FBFlashBridgeGetFriendsList
 * FBFlashBridgeGetUsersInfo
 * FBFlashBridgePromptPermission
 * FBFlashBridgePublishFeedStory
 * FBFlashBridgeShowShare
 * FBFlashBridgeUserInfo
 * FBFlashBridgeInviteFriends
 * FBFlashBridgeGetStream
 * FBFlashBridgeGetAppUsers
 * FBFlashBridgeSendNotification
 * FBFlashBridgeSendEMail
 * FBFlashBridgeGetAlbums
 * FBFlashBridgeGetPhotosInAlbum
 * FBFlashBridgeCreateAlbum
 * FBFlashBridgeGetStreamComments
 *
 *
 * 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("APP_USERS", onUserInfo);
 * FBFlashBridgeListener("STREAM_GET", onStreamGet);
 * ALBUMS_GET
 * PHOTOS_ALBUM_GET
 * ALBUM_CREATE
 * STREAM_COMMENTS_GET
 *
 */

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

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

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

function FBFlashBridgePromptPermission(permission) {
	FB.ensureInit(function() {
    	FB.Connect.showPermissionDialog(permission);
	});
}

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

function FBFlashBridgePublish($attachment, $actionLink) {
	FB.ensureInit(function() {
        FB.Connect.streamPublish('', $attachment, $actionLink, null, null, FBFlashBridgeOnPublished );
	});
}



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

function FBFlashBridgeOnPublished(){
	if (arguments && arguments[0] && arguments[0] != null && arguments[0] != 'null' && arguments[0] != '') {
		FBFlashBridgeDispatcher("PUBLISH_SUCCESS");
		FBFlashBridgeFlashDispatcher("onPublishSuccess");        
    }
}

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

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

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

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

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

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

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

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);
}

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

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(appName, appKey, appURL, flashObj) {
	sAppName = appName;
	sAppKey = appKey;
	sAppURL = appURL;

	oFlash = flashObj;
	
	FB.init(sAppKey, sAppURL, {debugLogLevel:6 });
	FBFlashBridgeFlashDispatcher("onInit");
}

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

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