/**
 * Fanta.com Facebook Javascript 
 * 
 * - To be included on every page on Fanta.com
 * - Handles the processes to work with Facebook
 * 
 */

var FANTA = FANTA || {}; 

FANTA.Facebook = function () {
		
	var accessToken;
	
	//var FACEBOOK_APP_ID = '185482848133228';
	//var FACEBOOK_APP_ID = '23550666633';
	var FACEBOOK_APP_ID;
	switch (document.domain) {
			case 'www.fanta.no':
				FACEBOOK_APP_ID = '231516626882532';
				break;
			case 'fanta.no':
				FACEBOOK_APP_ID = '231516626882532';
				break;
			case 'fanta.com':
				FACEBOOK_APP_ID = '190801607623992';  // FILL IN FB APP ID HERE
				break;
			case 'www.fanta.com':
				FACEBOOK_APP_ID = '190801607623992';  // FILL IN FB APP ID HERE
				break;
			default:
				FACEBOOK_APP_ID = '155406684505127';
		}
	var FANTA_FACEBOOK_PAGE_ID = '23550666633';
	
	/**
	 * When Facebook has been initialized via the ASync loader
	 * 
	 */
	var fbAsyncInit = function () {
		
		FB.init({
			appId: FACEBOOK_APP_ID,
			status: true,
			cookie: true,
			xfbml: true
		});
		
		FB.Event.subscribe('edge.create', function() {
			//console.log('edge.create');
			$('#facebookComment').show();
		});
		
		FB.Event.subscribe('edge.remove', function(response) {
			$('#facebookComment').hide();
		});

		FB.Event.subscribe('auth.login', function(response) {
			refreshUserInformation(response);
		});
		
		FB.Event.subscribe('auth.logout', function(response) {
			refreshUserInformation(response);
		});
		
		FB.getLoginStatus(function (response) {
			//console.log("gettingLoginStatus");
			refreshUserInformation(response);
		});
	};
	
	$(fbAsyncInit);
	
	function refreshUserInformation(response){
		if (response.authResponse)  {
			//console.log("showing");
			showUserInformation(response);
		} else {
			//console.log("hiding");
			hideUserInformation(response);
		}
	}
	
	function hideUserInformation () {
		$('img, div', '#facebookLoginLogout').remove();
		$('#facebookComment').hide();
		$('#facebookLike').hide();
		$('#facebookHowToPost').show();
	}
	
	function showUserInformation (response) {
		accessToken = response.authResponse.accessToken;
		$('#facebookLike').show();
		$('#facebookHowToPost').hide();
		FB.api('/me/', function(response) {
			if (!response || response.error) {
				//console.log('An error occured retrieving the Facebook information');
			} else {
				buildUserInformation (response);
				userLikesFanta(function(result){
					$('#facebookComment')[result ? 'show' : 'hide']();
				});
			}
		});
	}
	
	function userLikesFanta(callback){
		//console.log("in userlikesfanta");
		//TODO: if user "likes" fanta, then show... else tell them they have to like it?
		FB.api('/me/likes', function(response) {
			//console.log("response.data:" + response.data);
			if (response.data){
				var brandList = response.data;
				for(var i in brandList){
					if (brandList[i].id == FANTA_FACEBOOK_PAGE_ID){
						//console.log("true!");
						callback(true);
						return;
					}
				}
			}
			callback(false);
		});
	}
	
	/**
	 * Builds out the DOM elements based on the response object
	 * passed in
	 * 
	 * @author Karl Stanton
	 * @since 0.1
	 * 
	 * @param {Object} response
	 */
	function buildUserInformation (response) {
		
		// Create the profile div
		var sProfile	 = '<img src="https://graph.facebook.com/me/picture/?access_token=' + accessToken + '" width="50" height="50" />'
			sProfile	+= '<div>Logged in as ' + response.name + '<br /></div>';

		$('img, div', '#facebookLoginLogout').remove();

		//$('#facebookLoginLogout').hide();

		// Append the users picture
		$('#facebookLoginLogout').prepend(sProfile);

	}
	
	
};

FANTA.Facebook();

