/*
	File: af_auth_fb.js
	Desc: Generic JS file to handle common Facebook tasks using the Javascript SDK
		  provided by Facebook.
	Requirements: The page using these functions must have previously loaded FB scripts
	Updated	: September 30th 2011
*/

var userIsFBLoggedIn;

window.fbAsyncInit = function() {
	FB.init({
		appId: '118960208123041',
		status: true,
		cookie: true,
		xfbml: true,
		channelUrl: document.location.protocol + "//" + window.location.hostname + "/channel.html",
		oauth : true
	});
	
};
(function(d){
 var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
 js = d.createElement('script'); js.id = id; js.async = true;
 js.src = "//connect.facebook.net/en_US/all.js";
 d.getElementsByTagName('head')[0].appendChild(js);
}(document));
   

// Returns true or false depending on if login successful (and user exists)
function loginFB(callback, createAccount)
{

	var permsWeWant	= "email,user_birthday,status_update,publish_stream,offline_access,user_about_me,user_interests,read_stream,user_likes,friends_about_me,friends_likes,friends_interests,publish_actions";

	if (typeof createAccount == 'undefined')
	{
		createAccount = true;
	}
	
	var isUser = false;
	FB.login(
		function(response)
		{
			if (response.authResponse)
			{
				isUser	= parseInt( queryAuth("logInUserWithFacebookID", response.authResponse.userID + "," + response.authResponse.accessToken) );
			
				/*
				if (response.scope)
				{
					// Determine if this Facebook ID is linked to a user or not
					isUser	= parseInt( queryAuth("logInUserWithFacebookID", response.authResponse.userID + "," + response.authResponse.accessToken) );
				} else {
					// We need you to grant permissions
					if (callback)
					{
						callback( false );
					} else {
						return false;
					}
				}
				*/
				
				// alert('isUser = ' + isUser);
				//isUser += 0;
				if (isUser)
				{
					if (callback)
					{
						callback( true );
					} else {
						return true;
					}
				} else {
					// User was not found, do we want to try creating an account? If yes...
					if (createAccount==false)
					{
						// We don't want to create an account
						if (callback)
						{
							callback( true );
							return;
						} else {
							return true;
						}
					}
					
					// We want to try creating an account (default setting)
					
					// We have a valid session but we didn't find an account. Let's try to create one OR link an existing account to this FB ID
					var fbCreateSuccess = queryAuth("createUserFromFacebook",response.authResponse.userID + "," + response.authResponse.accessToken);
					if (fbCreateSuccess)
					{
						// Log user in
						var login = queryAuth("logInUserWithFacebookID",response.authResponse.userID);
						if (login)
						{
							if (callback)
							{
								callback( true );
							} else {
								return true;
							}
						}
					} else {
						if (callback)
						{
							callback( false );
						} else {
							return false;
						}
					}
				}
			} else {
				// alert('Unable to communicate with Facebook.');
				return false;
			}
		},
		{
			scope: permsWeWant
		}
	);
} // loginFB

// Returns User data from a session
function getFBUserData( callback )
{
	
	// Check if there is a FB user logged in
	var session = FB.getAuthResponse();	
	if (session == null)
	{
		callback ( false );
		return;
	}
	// If there's a session, let's check for permissions
	/*
	var permissions = null;
	FB.getLoginStatus(function(response){
		if (response.session)
		{
			if (response.scope)
			{
				permissions = response.scope;
			}
		} else {
			// No session found
			return false;
		}
		alert("Permissions " + permissions);
	});
	*/
	
	FB.api('/me', function(response)
	{
		var query = FB.Data.query('select first_name, last_name, sex, pic_square, birthday_date, email, username from user where uid={0}', response.id);
		
		query.wait(function(rows) {
			
			if (callback)
			{
				callback ( rows[0] );
			} else {
				return rows[0];
			}
			
         });
             
	});
	
} // getFBUserData
