// Mindbloom Facebook Connection
//
// The mb_fb object tracks FB session state inside Mindbloom
// and provides accessor methods to the FB.Connect library.
//
// local dependencies: 
//   jquery.js
//   json2.js

var mb_fb = {};

//////////////////
// Members
//////////////////
mb_fb.connected = false;
mb_fb.apiKey = null;
mb_fb.appid = null;
mb_fb.callback = null;
mb_fb.campaign_id = null;  // campaign for wall post links
mb_fb.pendingMsgText = "";
mb_fb.pendingMsgImg = null;
mb_fb.image = "";
mb_fb.onconnectedCallback = null;
mb_fb.onconnectedCallback_arg = null;
mb_fb.onnotconnectedCallback = null;
mb_fb.onloginCallback = null;
mb_fb.onloginfailedCallback = null;
mb_fb.friendsInApp = null;
mb_fb.journey_callback = null;
mb_fb.journey_callback_args = null;
mb_fb.user = null;
mb_fb.current_user = null;
mb_fb.scope = false;
mb_fb.appid = null;
mb_fb.access_token = null;
mb_fb.signed_request = null;
mb_fb.uid = null;
mb_fb.calls_to_action = [
	"Grow your free Life Tree today!",
];
mb_fb.default_img_caption = 'Mindbloom is the fun, simple and effective way to improve the quality of your life.';
mb_fb.appids = {
	'local.mindbloom.com': '194587114530',
	'stage.mindbloom.com': '197270399838',
	'stage2.mindbloom.com': '197270399838',
	'qa.mindbloom.com': '197270399838',
	'corp-stage.mindbloom.com': '197270399838',
	'corp-stage2.mindbloom.com': '197270399838',
	'www.mindbloom.com': '211109333395',
	'local.csus.edu': '129240513780828',
	'stage.csus.edu': '126192750756115',
	'stage2.csus.edu': '126192750756115',
	'qa.csus.edu': '126192750756115',
	'bloom.mindbloom.com':'211109333395',
	'mindbloom.com':'211109333395',
	'mindbloom.thewellatsacstate.com': '140164679332734',
	'stage.gs.mindbloom.com': '157094797668521',
	'stage2.gs.mindbloom.com': '157094797668521',
	'qa.gs.mindbloom.com': '157094797668521',
	'local.gs.mindbloom.com':'158370130879581',
	'gs.mindbloom.com': '172785699407643'
};
mb_fb.callbacks = {
	'local.mindbloom.com': 'mindbloom-dev',
	'stage.mindbloom.com': 'mindbloom-stage',
	'stage2.mindbloom.com': 'mindbloom-stage',
	'qa.mindbloom.com': 'mindbloom-stage',
	'www.mindbloom.com': 'mindbloom-live',
	'bloom.mindbloom.com':'mindbloom-live',
	'mindbloom.com':'mindbloom-live',
	'local.csus.edu': 'sacstate-dev',
	'stage.csus.edu': 'sacstate-stage',
	'stage2.csus.edu': 'sacstate-stage',
	'qa.csus.edu': 'sacstate-stage',
	'mindbloom.thewellatsacstate.com': 'sacstate',
	'stage.gs.mindbloom.com': 'mindbloom-gs-stage',
	'stage2.gs.mindbloom.com': 'mindbloom-gs-stage',
	'qa.gs.mindbloom.com': 'mindbloom-gs-stage',
	'local.gs.mindbloom.com': 'mindbloom-gs-dev',
	'gs.mindbloom.com': 'mindbloom-gs'
};
mb_fb.campaign_ids = {
	'local.mindbloom.com': 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
	'stage.mindbloom.com': 'c8acbbbc-fd49-4fe0-a842-cc0276d72900',
	'stage2.mindbloom.com': 'c8acbbbc-fd49-4fe0-a842-cc0276d72900',
	'qa.mindbloom.com': 'c8acbbbc-fd49-4fe0-a842-cc0276d72900',
	'www.mindbloom.com': '742fa118-7498-4201-abe1-83cc6da8cc44',
	'bloom.mindbloom.com': '742fa118-7498-4201-abe1-83cc6da8cc44',
	'mindbloom.com': '742fa118-7498-4201-abe1-83cc6da8cc44',
	'local.csus.edu': 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
	'stage.csus.edu': 'c5946323-2ad0-4dfc-ab2d-0a12a90bc152',
	'stage2.csus.edu': 'c5946323-2ad0-4dfc-ab2d-0a12a90bc152',
	'qa.csus.edu': 'c5946323-2ad0-4dfc-ab2d-0a12a90bc152',
	'mindbloom.thewellatsacstate.com': 'ae612cb0-e1e6-41b7-96a8-446ed683ef66',
	'stage.gs.mindbloom.com': '245796c9-6685-439d-8ec2-dc9767a23dd0',
	'stage2.gs.mindbloom.com': '245796c9-6685-439d-8ec2-dc9767a23dd0',
	'qa.gs.mindbloom.com': '245796c9-6685-439d-8ec2-dc9767a23dd0',
	'local.gs.mindbloom.com': 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
	'gs.mindbloom.com': '245796c9-6685-439d-8ec2-dc9767a23dd0'
};

mb_fb.http_url_root = 'http://';
mb_fb.http_url_root += (window.location.hostname.indexOf('local')>-1) ? 'stage.mindbloom.com' : window.location.host;

/******************* CONNECT METHODS ************************/

// Try to login to MB with FB User ID (returns json)
mb_fb.login = function()
{
	mb_util.logToConsole("mb_fb.login()");
	if(!mb_fb.connected)
	{
		setTimeout("mb_fb.login()",1000);
		return;
	}
	// Code used to simulate fb user with no mb account
	// TESTING
	if(mb_fb.onloginfailedCallback){
		mb_fb.onloginfailedCallback();
		return;
	}
	
	mb_util.logToConsole("mb_fb.login() B");
	mb_fb.requireSession();
	var postData = {session:JSON.stringify({signed_request:mb_fb.signed_request, uid:mb_fb.uid})};
	$.ajax({
		url: "/facebook/login",
		type: "POST",
		data: postData,
		dataType: "json",
		success: function(data)
		{
			if(data['logged-in'] == true)
			{
				mb_util.logToConsole("mb_fb.login() success");
				mb_util.mb_user = data['user'];
				mb_util.mb_user_id = mb_util.mb_user.id;
				if(mb_fb.onloginCallback){
					mb_fb.onloginCallback();
				}
			}
			else
			{
				mb_util.logToConsole("mb_fb.login() failed - no user found with that fb_uid");
				if(mb_fb.onloginfailedCallback){
					mb_fb.onloginfailedCallback();
				}
			}
		}
	});
};

// User is trying to connect MB to their FB account.
mb_fb.requireSession = function(save_fb_user)
{
	mb_util.logToConsole('mb_fb.requireSession()');
	FB.login(function(response) {
		if (response.authResponse) {
			mb_fb.session = response.authResponse;
			mb_fb.response = response;
			mb_fb.connect(save_fb_user);
		} else {
			// canceled login
			mb_fb.connected = false;
			mb_fb.onnotconnected();
		}
	});
};

//only called by mb_fb.requireSession()
mb_fb.connect = function(save_fb_user, override)
{
	mb_util.logToConsole("mb_fb.connect()");
	mb_fb.onLogin(mb_fb.response);
	var postData = {session:JSON.stringify(mb_fb.session)};
	if (save_fb_user || override){
		postData.save_fb_user = true;
		postData.facebook_uid = mb_fb.uid;
	}
	if (override){
		postData.override = true;
	}
	$.ajax(
		{	url: "/facebook/connect",
			type: "POST",
			data: postData,
			success: function(data)
			{
				if(data.indexOf('error')!=-1){
					mb_util.alertBox(
						null,"warning",'Wait!',
						'This Facebook account is already associated with another Tree! Do you wish to associate this tree with this FB account instead?',
						null,
						[
							[
								"Cancel","black","wide",
								function() { 
									mb_fb.onconnectedCallback=null;mb_util.closeAlertBox();
								}
							],
							[
								"Override","green","wide",
								function() { 
									mb_fb.connect(true, true);
									mb_util.closeAlertBox(); 
								}
							]
						],
						true
					);
					return;
				}
				else {
					mb_fb.onconnected();
				}
			},
			error: function(){
				$('#alertBox').remove();
				mb_util.simpleAlertBox('You seem to have logged out of your facebook account. Please log back in and try again','error');
			}
		}
	);
};

mb_fb.requireSessionCorp = function()
{
	mb_util.logToConsole('mb_fb.requireSession()');
	FB.login(function(response) {
		if (response.authResponse) {
			mb_fb.onLogin(response);
			mb_fb.connected = true;
			mb_fb.onconnected();
		} else {
			// canceled login
			mb_fb.connected = false;
			mb_fb.onnotconnected();
		}
	});
};

mb_fb.logout = function(callback)
{
	FB.logout(function(response){
		mb_fb.connected = false;
		mb_fb.uid = null;
		mb_fb.onconnectedCallback = null;
		mb_fb.onnotconnectedCallback = null;
		mb_util.logToConsole('mb_fb.logout()');
		if(callback){
			callback();
		}
	});
};

mb_fb.onconnected = function(uid)
{
	mb_util.logToConsole("mb_fb.onconnected()");
	mb_fb.connected = true;
	
	mb_util.logToConsole("mb_fb.onconnected() B");
	
	mb_util.logToConsole("mb_fb.onconnected() D");
	if(mb_fb.onconnectedCallback){
		mb_util.logToConsole("mb_fb.onconnected() E");
		mb_fb.onconnectedCallback(mb_fb.onconnectedCallback_arg);
	}
	mb_util.logToConsole("mb_fb.onconnected() F");
	mb_fb.onconnectedCallback =  null;
};	

mb_fb.onnotconnected = function(uid)
{
	mb_util.logToConsole("mb_fb.onnotconnected()");
	mb_fb.connected = false;
	if(mb_fb.onnotconnectedCallback){
		mb_fb.onnotconnectedCallback();
	}
	mb_fb.onnotconnectedCallback =  null;
};

mb_fb.registerUser = function()
{
	mb_util.logToConsole("mb_fb.registerUser()");
	if( !mb_fb.connected ){
		return;
	}
	$.ajax({	
		url: "/api/mb_user/me",
		type: "PUT",
		dataType: "json",
		success: function(data)
		{
			if (data.error_message) 
			{
				mb_util.simpleAlertBox("Facebook registration error: "+data.error_message, "error");
			}
			else
			{
				mb_util.mb_user = data;
				mb_fb.getUserRecord();
				document.getElementById('MB_iframeContent').contentWindow.mb_user = data;
				document.getElementById('MB_iframeContent').contentWindow.register.mb_user = data;
				document.getElementById('MB_iframeContent').contentWindow.register.populateRegister();
				mb_util.closeAlertBox();
				document.getElementById('MB_iframeContent').contentWindow.register.slideToCreateAccount2();
			}
		}
	});
};

// Prompt user to grant particular FB permission (unless already granted)
mb_fb.requestPermission = function(permission, callbackFunc, dontRequire) 
{
	mb_util.logToConsole("mb_fb.requestPermission");
	function complete(){
		callbackFunc(true);
	}
	if(dontRequire){
		mb_util.logToConsole('dontRequireAsking');
		mb_fb.postToWall(complete, true);
		return;
	}
	FB.login(function(response) {
		if (response.authResponse) {
			if(response.scope){
				mb_fb.scope = true;
				mb_fb.onconnectedCallback = null;
				if(permission.indexOf('_2')!=-1){
					complete();
					return false;
				}
				mb_fb.postToWall(complete, true);
			} else {
				//no scope selected
				mb_util.logToConsole('user refused permissions');
				mb_fb.scope = false;
				mb_fb.onconnectedCallback = null;
				if(permission.indexOf('_2')!=-1){
					return false;
				}
				mb_fb.postToWall(complete, dontRequire);
			}
			mb_fb.session = response.authResponse;
			mb_fb.connect();
		} else {
			// canceled login
			mb_fb.connected = false;
		}
	}, {scope:'publish_stream'});
};

/********************** PUBLISHING METHODS *****************************/
mb_fb.postToWall = function(complete, dontRequire)
{
	var postData = {
		method: 'stream.publish',
		message: mb_fb.pendingMsgText,
		action_links: JSON.stringify(mb_fb.renderPublishActionLinks()),
		attachment: JSON.stringify(mb_fb.pendingMsgImg)
	};
	
	mb_util.logToConsole('mb_fb.postToWall(): ' + mb_fb.scope);
	var showUI = 'ui';
	if (mb_fb.scope || dontRequire){
		showUI = 'api';
	}
	
	mb_util.logToConsole('posttowall: '+showUI);
	
	FB[showUI](postData,function(response){
		if (!response || response.error) {
			mb_util.logToConsole('Error occured');
		} else {
			mb_util.logToConsole(JSON.stringify(response));
			complete();
		}
	});
};

mb_fb.postToFriendsWall = function(id, name, message, attachment)
{
	postData = {};
	postData.method = 'stream.publish';
	postData.message = message;
	postData.target_id = id;
	postData.attachment = attachment;
	
	mb_util.logToConsole('mb_fb.postToFriendsWall(): ' + name)
	FB.ui(postData,function(response){
		if (!response || response.error) {
			mb_util.logToConsole('Error occured');
		} else {
			mb_util.logToConsole(JSON.stringify(response));
		}
	});
};

//Assumes publish stream permission was granted
mb_fb.postToMultFriendsWall = function(friends, name, message, attachment)
{
	postData = {};
	postData.method = 'stream.publish';
	postData.message = message;
	postData.attachment = attachment;
	
	$.each(friends, function(f, friend){
		postData.target_id = friend.fb_uid;
		FB.api(postData,function(response){
			if (!response || response.error) {
				mb_util.logToConsole('Error occured');
			} else {
				mb_util.logToConsole(JSON.stringify(response));
			}
		});
	})
};

// Publish a text-only message to user wall
mb_fb.publishMsg = function(msg_text,connect_window_type)
{
	mb_util.logToConsole("mb_fb.publishMsg()");
	var msg_text = (msg_text) ? msg_text : "I'm growing with Mindbloom!";
	var fbPostData = {
		title:msg_text
	}
	var post = new mb_fb.FBPost(fbPostData);
	post.publish();
};

// publish a goal action update to facebook.
// Note: most messages (if not all) messages that we publish
//       will include an image and therefore use the publishImage method
mb_fb.publishAction = function(goal_action_id, action_statement, journal, areaName, emotion, dontRequire)
{
	mb_util.logToConsole("mb_fb.publishAction emotion = "+ emotion + " action_statement = "+action_statement+ ' areaName = '+ areaName+' journal = '+journal);
	var msg_text;
	var img_caption;
    var site_name = "Mindbloom";
	
	emoticon_src = '/media/img/common/achievement/badges/v2/actionPack.png';
	
	if (areaName){
		areaName = areaName.replace(/^\w/, function($0) { return $0.toUpperCase(); }) +' ';
	}
	msg_text = "I completed my "+areaName+"action to \""+action_statement+"\"!";
	if (journal){
		img_caption = mb_util.mb_user.first_name+' said,  \"'+journal+' \"'
	} else {
		img_caption = mb_fb.default_img_caption;
	}
	
	var fbPostData = {
		title:msg_text,
        img_src:emoticon_src,
		img_caption:img_caption,
		brand:'#brand_action'
	}
	var post = new mb_fb.FBPost(fbPostData);
	post.publish();
	
};

mb_fb.publishLeaf = function(leafName, leafIcon, journey_callback, journey_callback_args)
{
	mb_util.logToConsole("mb_fb.publishLeaf leafName = "+ leafName);
	var msg_text = 'I grew a new leaf, \"'+leafName+'\", today!';
	var img_caption;
	var img_description = 'Mindbloom is the fun, simple and effective way to improve the quality of your life.';
	var emoticon_src = (leafIcon)?leafIcon:'/media/images/badges/badges_journal_emoticons/badges_journal_emoticons_00.png';
	
	var fbPostData = {
		title:msg_text,
		description:img_caption,
		img_src:emoticon_src,
		img_caption:img_description,
		callback:journey_callback,
		callbackArg:journey_callback_args
	}
	var post = new mb_fb.FBPost(fbPostData);
	post.publish();
};

mb_fb.publishAchievement = function(name, key, level, dontRequire){
	if (!mb_util.mb_user.auto_facebook_post || !mb_util.mb_user.facebook_uid){
		return;
	}

	mb_util.logToConsole("mb_fb.publishAchievement() name = " + name + " key = "+ key);
	var msg_text = "";
	var img_caption;
	var icon_src;

	mb_fb.noAlert = true;
	
	//Begin constructing the message
	
	if(key == 'level_up'){
		msg_text += "I'm now at Level "+ level + " in Mindbloom!";
		icon_src = '/media/img/common/achievement/icon/trophy_levelup.png';
	} else{
		msg_text += "I earned the "+name+" achievement today!";
		icon_src = mb_common_badges.newBadgeUrl(key);
	}
	
	img_caption = mb_fb.default_img_caption;
	
	var fbPostData = {
		title:msg_text,
		img_src:icon_src,
		img_caption:img_caption,
		dont_require:dontRequire
	}
	var post = new mb_fb.FBPost(fbPostData);
	post.publish();
}

mb_fb.publishFeature = function(isFeature, name, icon, journey_callback, journey_callback_args, dontRequire){

	mb_util.logToConsole("mb_fb.publishFeature() name = " + name + " icon = "+ icon);
	var msg_text = 'I purchased the \"'+name+'\" feature today!';
	var img_caption;
	var img_description = 'Mindbloom is the fun, simple and effective way to improve the quality of your life.';
	var icon_src = mb_common_badges.featureBadgeUrl(icon, 60);
	if(!isFeature){
		var msg_text = 'I just moved my Life Tree to the \"'+name+'\" location!';
		var icon_src = mb_common_badges.locationFBBadgeUrl(icon.split(' ')[1], 60);
	}

	var fbPostData = {
		title:msg_text,
		description:img_caption,
		img_src:icon_src,
		img_caption:img_description,
		callback:journey_callback,
		callbackArg:journey_callback_args,
		dont_require:dontRequire
	}
	var post = new mb_fb.FBPost(fbPostData);
	post.publish();
};

// Publish a message that includes an image to facebook
// Note: most messages (if not all) messages that we publish
//       will use this method.
mb_fb.publishImage = function(leafName,caption,img_url)
{
	var img_caption = 'Mindbloom is the fun, simple and effective way to improve the quality of your life.';

	var fbPostData = {
		title:caption,
		description:'',
		img_src:img_url,
		img_caption:img_caption
	};
	var post = new mb_fb.FBPost(fbPostData);
	post.publish();
	
};

mb_fb.renderPublishActionLinks = function()
{
	var actionText = "Grow with "
		+ ((mb_util.mb_user.first_name) ?  mb_util.mb_user.first_name : "them");
	return [{ text: actionText, href: "http://" + window.location.host+"/confirm_invite.html?sender_mb_user_id="+mb_util.mb_user.id }];
};

//************** RENDER METHODS **********************//
mb_fb.renderFriendSelector = function(excludes)
{
	mb_util.logToConsole("mb_fb.renderFriendSelector() A");

	//////////////////////////////////////////////////////
	// Had some trouble getting a jQuery version of this code
	// to work, so we're stuck with...
	//////////////////////////////////////////////////////
	var container_id = "fb_friends";
	var success_action = "http://" + window.location.host + "/facebook/invite";
	var invite_url = "http://" + window.location.host +"/confirm_invite.html?sender_mb_user_id="+mb_util.mb_user.id;
	var target = "_self";

	document.getElementById(container_id).innerHTML 
					+= '<fb:serverFbml width="625px" height="417px" style="width:625px;height:400px">'
					+ ' <scri'+'pt type="text/fbml">'
					+ '  <fb:fbml>'
					+ '   <fb:request-form invite="true" type="Mindbloom"'
					+ '     action="' + success_action + '"'
					+ '     target="'+target+'"'
					+ '     content="Grow a life tree with me at Mindbloom!'
					+ '       <fb:req-choice url=\'' + invite_url + '\' label=\'Go To Mindbloom\' />'
					+ '   ">'
					+ '    <fb:multi-friend-selector'
					+ '      target="'+target+'"'
					+ '      showborder="true" rows="3" cols="4"'
					+ '      exclude_ids="'+excludes+'"'
					+ '      email_invite="false" bypass="cancel"'
					+ '      actiontext="Invite your friends to Grow their own Trees">'
					+ '   </fb:request-form>'
					+ '  </fb:fbml>'
					+ ' </scri'+'pt>'
					+ '</fb:serverFbml>';
					
	FB.XFBML.parse(document.getElementById(container_id));
	
	mb_util.logToConsole("mb_fb.renderFriendSelector() D");
	$(container_id+' > iframe').attr('style', 'height:410px;width:625px');
};

mb_fb.renderLike = function(container_id, url)
{
	mb_util.logToConsole("mb_fb.renderLike()");
	var loc = mb_fb.getWindowLocation(url);
	var xfbml = '<fb:like action="like" href="'+loc+'" send="false" layout="button_count" show_faces="false"></fb:like>';
	mb_fb.parseXFBML(xfbml, container_id);
};

mb_fb.renderLoginButton = function(container_id, callback)
{
	mb_util.logToConsole("mb_fb.renderLoginButton()");
	if (mb_common_client.isIE()){
		$('#'+container_id).append(
			$('<a/>')
			.attr('id','facebookLoginButton')
			.css({display:'inline-block',background: "url(/mobile/img/fb_login.png) no-repeat scroll center 0", height: "19px", width:'60px'})
			.bind('click',function(e){
				window.location = 'https://graph.facebook.com/oauth/authorize?client_id='+mb_fb.appid+'&redirect_uri=http://'+window.location.host+'/facebook/login?format=html&type=user_agent';
			})
		)
		return;
	}
	mb_fb.loginCallback = (callback!==undefined) ? callback : function(){};
	var xfbml = '<fb:login-button onlogin="mb_fb.loginCallback(response)">Login</fb:login-button>';
	mb_fb.parseXFBML(xfbml, container_id);
};

mb_fb.renderRecommendations = function(container_id)
{
	mb_util.logToConsole("mb_fb.renderRecommendations()");
	var xfbml = '<fb:recommendations site="mindbloom.com" font="verdana"></fb:recommendations>';
	mb_fb.parseXFBML(xfbml, container_id);
};


mb_fb.renderComments = function(container_id, url)
{
	mb_util.logToConsole("mb_fb.renderComments()");
	var loc = mb_fb.getWindowLocation(url);
	var xfbml = '<fb:comments xid="'+loc+'" numposts="10"></fb:comments>';
	mb_fb.parseXFBML(xfbml, container_id);
};

mb_fb.renderLikeBox = function(container_id)
{
	mb_util.logToConsole("mb_fb.renderLikeBox()");
	var xfbml = '<fb:like-box profile_id="159013483626" connections="10"></fb:like-box>';
	mb_fb.parseXFBML(xfbml, container_id);
};

mb_fb.renderFacePile = function(container_id)
{
	mb_util.logToConsole("mb_fb.renderFacePile()");
	var xfbml = '<fb:facepile max-rows="2">';
	mb_fb.parseXFBML(xfbml, container_id);
};

mb_fb.renderLiveStream = function(container_id)
{
	mb_util.logToConsole("mb_fb.renderLiveStream()");
	var xfbml = '<fb:live-stream event_app_id="'+mb_fb.appid+'"></fb:live-stream>';
	mb_fb.parseXFBML(xfbml, container_id);
};

mb_fb.renderActivityFeed = function(container_id, url)
{
	mb_util.logToConsole("mb_fb.renderActivityFeed()");
	var loc = mb_fb.getWindowLocation(url);
	var xfbml = '<fb:activity site="'+url+'"></fb:activity>';
	mb_fb.parseXFBML(xfbml, container_id);
};

mb_fb.renderProfilePic = function(container_id, uid)
{
	mb_util.logToConsole("mb_fb.renderActivityFeed()");
	var xfbml = '<fb:profile-pic uid="'+uid+'"></fb:profile-pic>';
	mb_fb.parseXFBML(xfbml, container_id);
};

mb_fb.parseXFBML = function(xfbml, container_id)
{
	mb_util.logToConsole("mb_fb.parseXFBML() A");
	document.getElementById(container_id).innerHTML += xfbml;
	FB.XFBML.parse(document.getElementById(container_id));
	mb_util.logToConsole("mb_fb.parseXFBML() B");
};


/********************** UTILITY METHODS *****************************/
mb_fb.getBadgeUrl = function(name, icon, size)
{
    var base = "/media/images/badges";
    var info = icon.split(' ');
    var name = info[0];
    var bloomcount = info[1];

    /* Ideally, journey.icon has "Super" in it, but that requires reworking of how super
     * achievements are journeyed */
    var gold = (name.toLowerCase().indexOf("super") != -1);

    if (bloomcount === undefined) {
        bloomcount = 'star';
    }

    if (name == 'level_up') {
        var level = bloomcount;

        if (bloomcount=='star') {
            level = mb_util.mb_user.level;
        }

        return mb_common_badges.levelUpBadgeUrl(level);
    }

    if (name == 'FoundingBloomer') {
        return where.mb_common_badges.foundingBloomerBadgeUrl(size);
    }

    if (size == 60 && bloomcount != '') {
        var completed = (bloomcount == "star");
        return where.mb_common_badges.bloomCountBadgeUrl(name, size, info[1], completed, gold);
    }

    return where.mb_common_badges.badgeUrl(name, size);
};

mb_fb.getWindowLocation = function(url)
{
	var host = window.location.host;
	if (host.indexOf('local.mindbloom.com')!=-1){
		host = 'stage.mindbloom.com';
	}
	if ( url!==undefined ){
		return window.location.protocol +'//'+ host + '/' + url;
	}
	return window.location.protocol +'//'+ host + '/' + window.location.pathname + window.location.search + window.location.hash;
};

mb_fb.inviteAttachment = function(){
	var attach = {
		name:'I\'m growing in Mindbloom. You should too!',
		href:"http://" + window.location.host + "/confirm_invite.html?sender_mb_user_id="+mb_util.mb_user.id,
		caption:'Mindbloom is the fun, simple and effective way to improve the quality of your life.',
		description:'Let\'s grow together!', 
		media:[{
			type:'image',src:mb_fb.http_url_root+'/media/images/badges/badges_freeseeds_FB_60x60.png',
			href:"http://" + window.location.host + "/confirm_invite.html?sender_mb_user_id="+mb_util.mb_user.id
		}]
	};
	return attach;
}

mb_fb.smallAlert = function(message,brand){
	brand = brand || "#brand_action";
	var tip = mb_util.showTip(brand,message);
	setTimeout(function(){
		tip.fadeOut(function(){tip.remove();});
	},2000);
};

//////////////BROKEN!////////////////
mb_fb.friends_getAppUsers = function(callback)
{
	if(mb_fb.friendsInApp!=null) {
		callback(mb_fb.friendsInApp);
	}
	FB.ensureInit(function () {
		FB.Facebook.get_sessionState().waitUntilReady(function() {
			FB.Facebook.apiClient.friends_getAppUsers(callback);
		});
	});
};

mb_fb.getUserRecord = function()
{
    if (FB) {
        FB.api('/'+mb_util.mb_user.facebook_uid, function(response){
            mb_fb.user = response;
            mb_util.logToConsole('mb_fb.getUserRecord() Done');
        })
    }
}

mb_fb.getCurrentUserRecord = function()
{
	FB.api('/'+mb_fb.uid, function(response){
		mb_fb.current_user = response;
	})
}

mb_fb.updateUser = function(callback, logout)
{
	function update() {
		FB.login(function(response){
			if(response.authResponse){
				mb_fb.onLogin(response);
				$.ajax({
					url:'/api/mb_user/me',
					type: 'PUT',
					data: ({'facebook_uid':mb_fb.uid}),
					dataType: 'json',
					success: function(data){
						mb_util.simpleAlertBox('Your Facebook account has been updated.',"success");
						mb_fb.user = mb_fb.current_user;
						mb_util.mb_user = data;
						if(callback){
							callback();
						} else if (mb_fb.onconnectedCallback){
						    mb_fb.onconnectedCallback(mb_fb.onconnectedCallback_arg);
						}
					}
				});
			}
			else {
				//do nothing
			}
		});
	}
	
	if(logout) {
		mb_fb.logout(update);
	} else {
		update();
	}
}

mb_fb.removeUser = function(callback)
{
	$.ajax({
		url:'/api/mb_user/me',
		type: 'PUT',
		data: ({'facebook_uid':null}),
		dataType: 'json',
		success: function(data){
			mb_util.simpleAlertBox('Your Facebook account has been removed!',"success");
			mb_util.mb_user = data;
			mb_fb.user = null;
			callback();
		}
	});
}

mb_fb.onLogin = function(response)
{
	mb_util.logToConsole("mb_fb.onLogin()");
	if(!response || !response.authResponse){
		return;
	}
	mb_fb.access_token = response.authResponse.accessToken;
	mb_fb.signed_request = response.authResponse.signedRequest;
	mb_fb.uid = response.authResponse.userID;
	mb_fb.getCurrentUserRecord();
}

mb_fb.init = function(oninit,onconnected, onnotconnected){
	try{
		window.facebook_init = function(){
			mb_util.logToConsole('facebook_init()');
			mb_fb.appid = mb_fb.appids[window.location.hostname] || mb_fb.appids['mindbloom.com'];
			mb_fb.callback = mb_fb.callbacks[window.location.hostname] || mb_fb.callbacks['mindbloom.com'];
			mb_fb.campaign_id = mb_fb.campaign_ids[window.location.hostname] || mb_fb.campaign_ids['mindbloom.com'];
			FB.init({ appId: mb_fb.appid, oauth:true, status: true, cookie: true, xfbml: true });
			if (oninit){
				oninit();
			}
			FB.getLoginStatus(function(response) {
				if (response.authResponse) {
					mb_util.logToConsole('user is logged in');
					mb_fb.onLogin(response);
					if(onconnected){
						onconnected();
					}
				} else {
					mb_util.logToConsole('NOT logged in');
					if(onnotconnected){
						onnotconnected();
					}
				}
	
			});
		}
		window.fbAsyncInit = function() {
			facebook_init();
		};
		(function() {
			var e = document.createElement('script'); e.async = true;
			e.src = document.location.protocol +
			'//connect.facebook.net/en_US/all.js';
			document.getElementById('fb-root').appendChild(e);
		}());
	} catch (err) {}
};

mb_fb.FBPost = function(options){
	
	// var self = this;
	this.img_package={};
	this.defaults = {
		title:'',
		description:'',
		img_src:'',
		img_caption:'',
		click_through:'',
		callback:null,
		callbackArg:null,
		no_alert:false,
		dont_require:false
	}
	this.options = $.extend(this.defaults, options);

	this.publish = function()
	{
		mb_util.logToConsole("mb_fb.FBPost.publish()");
		var http_url_root = 'http://' + window.location.host;
		var img_prefix = (this.options.img_src.indexOf('cloudfront')>-1) ? '':
						(window.location.host.indexOf('local')>-1) ? 'http://stage.mindbloom.com':
						http_url_root;
		this.img_package = {
			'description': this.options.description,
			'caption' : this.options.img_caption,
			'name': mb_fb.calls_to_action[Math.floor(Math.random()*mb_fb.calls_to_action.length)], 
			'href': http_url_root,
			'media':[{
				'type':'image',
				'src': img_prefix + this.options.img_src,
				'href': http_url_root
			}]
		};
		this.publishPending();
	};

	this.publishPending = function(accepted)
	{
		mb_util.logToConsole("mb_fb.FBPost.publishPending()");
		var uploadToAlbum = (this.img_package!=null && (this.options.img_src.match('/m/i/')==null) ) ? true: false;
		var caption = (uploadToAlbum) ? this.options.title : '';
		var img_src = (uploadToAlbum) ? this.options.img_src : '';
		var noAlert = (this.options.no_alert||this.options.dont_require);
	
		if (this.options.title || this.img_package)
		{
			var self = this;
			this.requestPermission('publish_stream', function(accepted) {
				var postTo = "/facebook/publish_success";
				var postType = "POST";
				var postData = {
					_method: "POST",
					message: self.options.title,
					action_links: JSON.stringify(mb_fb.renderPublishActionLinks()),
					attachment: JSON.stringify(this.img_package),
					dont_require: self.options.dont_require
				};
			
				$.ajax(
					{	url: postTo,
						type: postType,
						data: (postData),
						dataType: "json",
						success: function(data)
						{
							mb_util.logToConsole('publish successful!');
						
							if(uploadToAlbum){
								// self.photoUpload(caption, img_src);
							} 
							if(!noAlert){
								mb_fb.smallAlert('Item posted to Facebook',self.options.brand);
							}
							if(self.options.callback)
							{
								self.options.callback(self.options.callbackArg);
							}
						}
					}
				)
			});
		}            
		mb_fb.connected = true;
	};
	
	this.postToWall = function(complete){
		var postData = {
			method: 'stream.publish',
			message: this.options.title,
			action_links: JSON.stringify(mb_fb.renderPublishActionLinks()),
			attachment: JSON.stringify(this.img_package)
		};
	
		mb_util.logToConsole('mb_fb.FBPost.postToWall(): ' + mb_fb.scope);
		var showUI = 'ui';
		if (mb_fb.scope || this.options.dont_require){
			showUI = 'api';
		}
	
		FB[showUI](postData,function(response){
			if (!response || response.error) {
				mb_util.logToConsole('mb_fb.FBPost.postToWall(): Error occured');
			} else {
				mb_util.logToConsole(JSON.stringify(response));
				complete();
			}
		});
	}
	
	// Prompt user to grant particular FB permission (unless already granted)
	this.requestPermission = function(permission, callbackFunc) 
	{
		mb_util.logToConsole("mb_fb.FBPost.requestPermission()");
		function complete(){
			callbackFunc(true);
		}
		if(this.options.dont_require){
			mb_util.logToConsole('mb_fb.FBPost.requestPermission(): Does Not Require Asking');
			this.postToWall(complete);
			return;
		}
		var self = this;
		FB.login(function(response) {
			if (response.authResponse) {
				if(response.scope){
					mb_fb.scope = true;
					mb_fb.onconnectedCallback = null;
					if(permission.indexOf('_2')!=-1){
						complete();
						return false;
					}
					mb_util.logToConsole('posttowall ? '+this)
					self.postToWall(complete);
				} else {
					//no scope selected
					mb_util.logToConsole('mb_fb.FBPost.requestPermission(): User refused permissions');
					mb_fb.scope = false;
					mb_fb.onconnectedCallback = null;
					if(permission.indexOf('_2')!=-1){
						return false;
					}
					self.postToWall(complete);
				}
				mb_fb.session = response.authResponse;
				mb_fb.connect();
			} else {
				// canceled login
				mb_fb.connected = false;
			}
		}, {scope:'publish_stream'});
	};

	this.photoUpload = function(caption, img_url)
	{
		mb_util.logToConsole("mb_fb.FBPost.photoUpload()");
		if (img_url!="")
		{
			var url_root = window.location.protocol + '//' + window.location.host;
			var http_url_root = 'http://' + window.location.host;
			var image = 'media/image'+img_url.substring(4);		//removes /m/i/ prefix and uses directory prefix

			this.requestPermission('publish_stream_2', function(e) {
				var postTo = "/facebook/photo_upload";
				var postType = "POST";
				var postData = {
					_method: "POST",
					caption: caption,
					image: image
				};

				$.ajax(
					{	url: postTo,
						type: postType,
						data: (postData),
						success: function(data)
						{
							mb_fb.smallAlert("Photo posted to Facebook");
						}
					}
				);
			});
		}
	};

};

mb_fb.init();

