// References: http://www.stevenvh.be/blog/?p=57

// Local variables
var movieName = "flashcontent";
var apiKey = "";
var receiver = "";

// Initialization
function fbInit(__movieName) {
	movieName = __movieName;
	//apiKey = __apiKey;
	//receiver = __receiver;
}

function fbPreStart() {
	FB_RequireFeatures(["Api"]);
}
// Connection (get key)
function fbStart() {
	// Step 1
	FB_RequireFeatures(["Api"], fbOnStarted);
}

function fbSetAPIData(__apiKey, __receiver) {
	apiKey = __apiKey;
	receiver = __receiver;
}

function fbOnStarted() {
	// Init
	FB.Facebook.init(apiKey, receiver); // Normal permissions

	// Get keys
	// This triggers the HTML popup
	FB.Bootstrap.requireFeatures(["Connect"], function() {
		// http://developers.facebook.com/docs/?u=facebook.jslib.FB.Connect.requireSession
		//FB.Connect.requireSession(requireSessionReady, requireSessionCancel, true); // if false, swf overlay always show. This doesn't always work
		requireSessionCustom(requireSessionReady, requireSessionCancel);
	});
}

function requireSessionCustom(b,d) {
	// Modified from FB.Connect.requireSession
	var a = FB.SessionDialog.getActive();
	if (!a) {
		a = FB.SessionDialog.make();
		a.setIsUserActionHint(true).request();
	} else {
		a.focus();
	}
	
	//alert("status = " + FB.Connect.get_status().result);
	waitForSessionConnection(b);
	//FB.Connect.get_status().waitForValue(FB.ConnectState.connected, b);
	a.add_cancelled(d);
}

function waitForSessionConnection(t, a) {
	var intervalID = window.setInterval(function() {
		//if(FB.Connect.get_status().get_isReady() && FB.Connect.get_status().result == FB.ConnectState.connected) {
		if(FB.Connect.get_status().get_isReady() && FB.Connect.get_status().result == FB.ConnectState.connected && FB.Facebook.apiClient.get_session() != null) {
			clearInterval(intervalID);
			requireSessionReady();
		}
	}, 200);
}


function requireSessionReady() {
	var sessionData = FB.Facebook.apiClient.get_session();
	getFlashMovie().onFacebookStartSuccess(sessionData.secret, sessionData.session_key);
}

function requireSessionCancel() {
	getFlashMovie().onFacebookStartCancelled();
}
 
function getFlashMovie() {
	return document.getElementById(movieName)
}

function commandStreamPublish(__message, __attachment, __links, __target_id) {
	// Do a direct wall post, with no extended permissions, and prompt the user for data approval
	//javascript:void(FB.Connect.streamPublish("Check this website blah blah blah! http://www.google.com",{media:[{type:'image',src:'http://www.bizzia.com/brandcurve/files/2007/12/wrigley-5-gum-packages.jpg', href:'http://www.google.com'}]}));
	//try {
	// Fails when cross-comain cookies are disabled (FDT)
		FB.Connect.streamPublish(__message, __attachment, __links, __target_id, null, onCommandStreamPublish);
	//} catch (err) {
	//	onCommandStreamPublish();
	//}
	//FB.Connect.streamPublish("Check this website blah blah blah! http://www.google.com",{media:[{type:'image',src:'http://www.bizzia.com/brandcurve/files/2007/12/wrigley-5-gum-packages.jpg', href:'http://www.google.com'}]});
	
	//http://developers.facebook.com/docs/?u=facebook.jslib.FB.Connect.streamPublish
}

function onCommandStreamPublish() {
	getFlashMovie().onFacebookCommandStreamPublish();
}

// Commands
function commandRequestExtendedPermissions(__permissions) {
	// WARNING: this doesn't work when testing from the FDT external msie-based player!
	// http://developers.facebook.com/docs/?u=facebook.jslib.FB.Connect.showPermissionDialog
	// __permissions is a single, comma-separated string list
	
	// http://www.facebook.com/connect/prompt_permissions.php?ext_perm=publish_stream&api_key=63816e59aecf86519a217e09f32be42a
	// Additional read: http://wiki.developers.facebook.com/index.php/Authorization_and_Authentication_for_Desktop_Applications
	
	FB.Connect.showPermissionDialog(__permissions, commandRequestExtendedPermissionsCallback);
}
/*
function commandRequestExtendedPermissions(__permissions) {
	alert("requesting permissions = " + __permissions);
}*/

function commandRequestExtendedPermissionsCallback(__permissions) {
	if (!__permissions) {
		getFlashMovie().onFacebookRequestExtendedPermissions(false);
	} else {
		getFlashMovie().onFacebookRequestExtendedPermissions(true, __permissions);
	}
}
