var flashId = "";

/**
 * 
 * Init
 * 
 * @param apikey
 * @param crossdomain
 * @param id
 * @return
 */
function fbInit(apikey, crossdomain, id) {
	FB.init(apikey, crossdomain);
	flashId = id;
}

/**
 * 
 * Login
 * 
 * @param isAuto
 * @return
 */
function fbLogin() {
	FB.ensureInit(function() {
		FB_RequireFeatures( [ "Connect" ], function() {
			FB.Connect.requireSession(onLogin, onLoginCanceled, true);
		})
	});
}

function onLoginCanceled() {	
	flashDispatcher("onLoginCanceled");
}

function onLogin() {	
	flashDispatcher("onLoggedIn", FB.Facebook.apiClient._session);
}

function onLoginFailed() {	
	flashDispatcher("onLoggedInFailed");
}

/**
 * 
 * Check Login
 * 
 * @return
 */
function fbCheckLogin() {
	FB.ensureInit(function() {
		FB_RequireFeatures( [ "Connect" ], function() {
			FB.Connect.ifUserConnected(onLogin, onNotLoggedIn);
		})
	});
}

function onNotLoggedIn() {
	
}

/**
 * 
 * Logout
 * 
 * @return
 */
function fbLogout() {
	FB.Connect.ifUserConnected(onLogin, onLogout);
}

/**
 * 
 * User Infos
 * 
 * @param uid
 * @param params
 * @return
 */
function fbUserInfo(uid, params) {
	FB.Facebook.apiClient.users_getInfo(uid, params, onUserInfo);
}

function onUserInfo(result, ex) {
	flashDispatcher("onUserInfo", result[0]);
}

/**
 * 
 * Logout
 * 
 * @return
 */
function fbLogout() {
	FB.Connect.logout(onLogout);
}

function onLogout() {
	flashDispatcher("onLoggedOut");
}

/**
 * 
 * Publish
 * 
 * @return
 * 
 * http://wiki.developers.facebook.com/index.php/FB_RequireFeatures
 */
function fbPublish(user_message, attachment, action_links, target_id, user_message_prompt, auto_publish, actor_id) {
	auto_publish = false;
	FB.Connect.streamPublish(user_message, attachment, action_links, target_id, user_message_prompt, onPublished, auto_publish, actor_id);
}

function onPublished() {
	flashDispatcher("onPublish");
}

/**
 * Helper
 */
function flashDispatcher(func) {
	if (arguments.length > 1)
		swfobject.getObjectById(flashId)[func](Array.prototype.slice.call(
				arguments).slice(1)[0]);
	else
		swfobject.getObjectById(flashId)[func]();
}

function isReady() {
	return true;
}