var Facebook = new Object();
Facebook.features = new Array('XFBML','Api','CanvasUtil');
Facebook.debug = { enabled: false, level: 0 };

Facebook.is_initialized = false;
Facebook.init_is_done = false;
Facebook.uid = null;

/* Initialize Facebook on this page 
*/
Facebook.init = function() {
	if( !BF_STATIC.facebook_enabled || Facebook.init_is_done ) return; 
	// Set values from Configs (has to be done here bc 
	// it must be done after the page is loaded)
	Facebook.static_receiver = BF_STATIC.fb_static_receiver;
	Facebook.api_key = BF_STATIC.fb_api_key;
	Facebook.Template = {	
		contribution :{	template_id : BF_STATIC.fb_template_bundle_id } ,
		quickpost    :{	template_id : BF_STATIC.fb_quickpost_template_bundle_id },
		badge        :{	template_id : BF_STATIC.fb_badge_vote_template_bundle_id } ,
		love_hate    :{	template_id : BF_STATIC.fb_love_vote_template_bundle_id } ,
		contest      :{	template_id : BF_STATIC.fb_quickpost_template_bundle_id } ,
		quiz_result  :{	template_id : BF_STATIC.fb_quickpost_template_bundle_id } 
	};

	// Set basic facebook behaviors
	Facebook.observe('load_user_info',function(params){
		Facebook.auto_log_into_buzzfeed( params )
	});
	Facebook.observe('load_user_info', function( params ) {
		var fields = $$('.facebook-user');
		for( var i = 0; i < fields.length; i++ ) {
			var f = fields[i];
			if ( f.tagName == 'INPUT' ) {
				f.value = params[f.getAttribute('field')] ;
			}
			else {
				f.update( params[f.getAttribute('field')] );
			}
		}
		Facebook.hide('facebook_login_button');
		Facebook.hide('facebook_logout_button');
		Facebook.username = params.username;
	}, {retroactive:true} );
	Facebook.observe('user_not_logged_in', function( params ){
		var user = new BF_User();
		if ( user.isLoggedIn() ) {
			Facebook.show('facebook_login_button');
			Facebook.hide('facebook_logout_button')
			if ($('current-username')) $('current-username').value=user.getUserInfo().username;
		}
	}, {waitForPage:true} );
	Facebook.observe('user_logged_in', function( params ){
		Facebook.hide('facebook_login_button'); 
		Facebook.show('facebook_logout_button');
		if ($('usernav-fbicon')) $('usernav-fbicon').show();
		if ($('fbicon2')) $('fbicon2').show();
	}, {waitForPage:true});
	Facebook.observe('load_user_session', Facebook.load_user_info );

	// Load the user session
	Facebook.load_user_session();

	// Map ui buttons to actions
	for( var id in Facebook.eventMap ) {
		var em = Facebook.eventMap[ id ];
		em.exists = false;
		var obj = $( id );
		if( obj ) {
			em.exists = true;
			if( em.event && em.method ) {
				obj.observe( 
					Facebook.eventMap[ id ].event,
					Facebook.eventMap[ id ].method
				);
			}
		}
	}
	Facebook.init_is_done = true;
	Facebook.fireEvent( 'initialization_complete', {} );
	for ( var e in Facebook.__eventsWaitForPage ) {
		if ( Facebook.__events[e].already_fired ) {
			var fns = Facebook.__eventsWaitForPage[e].listeners;
			for( var fni=0; fni<fns.length; fni++ ) {
				fns[fni]();
			}
		}
	}
	Facebook.promptForPermission();
}

Facebook.spinner = function( to_state ) {
	var spinner = $('facebook_spinner');
	if( !spinner ) return;
	if( to_state == 'on' ) spinner.show();
	else spinner.hide();
}

Facebook.decodeForm = function( form_id ) {
	var formData = readCookie( Facebook.generateCookieName() );
	if( formData ) {
		var decodedData = unescape( formData );
		var formObject = eval( '('+ decodedData +')' );
		var extra = formObject.extra;
		var frm = $(form_id);
		for( var el in formObject ) {
			if ( el=='extra' ) continue;
			var name = el;
			var type = formObject[el].type;
			var value = formObject[el].value;
			if ( frm[name] ) {
				if ( type == 'text' || type =='textarea' || type=='hidden' ) frm[name].value = value;
				else if ( type == 'checkbox' ) frm[name].checked = value;
				else frm[name].selectedIndex = value;
			}
		}
		if ( extra && extra.currentForm ) {
			var forms = new Array('text','image','video','link','quote');
			for( var i = 0; i < forms.length; i++ ) {
				var f = $('contribute-'+forms[i]+'-form');
				if( f ) f.hide();
			}
			bf_contribute.enableForm( extra.currentForm );
			var type = extra.currentForm.match(/\-(\w+)\-/)[1];
			bf_contribute.buttonToggle(type + '-contribute-activate');
			bf_contribute.facebook_toggled = true;
		}
		if ( extra && extra.image_preview ) {
			$('image-preview').setAttribute('src',extra.image_preview);
			$('image-preview-div').show();
			$('image-preview').show();
		}
	}
}

Facebook.encodeForm = function( form_id, extra ) {
	var formElements = new Object();
	formElements.extra = extra;
	var frm = $(form_id);
	for( var i = 0; i < frm.elements.length; i++ ) {
		var el = frm.elements[i];
		formElements[el.name] = { 
			type : el.type, 
			value : el.type == 'text' || 'textarea' || 'hidden' ? el.value : el.type == 'checkbox' ? el.checked : el.selectedIndex
		 };
	}
	var ajaxForm = Object.toJSON( formElements );
	var encodedForm = escape( ajaxForm );
	createCookie( Facebook.generateCookieName(), encodedForm, 1 );
}

Facebook.generateCookieName = function() {
	var page_name = window.location.pathname;
	page_name = page_name.replace(/[^a-zA-Z0-9]/g,'_');
	return 'fb_post_' + page_name;
}

/* All facebook methods must be called after the facebook 
loads features; calling facebook methods through this wrapper
ensures that happens. 
*/
Facebook.execute = function( callback ) {
	if( Facebook.api_key && Facebook.static_receiver ) {
		if( Facebook.is_initialized ) {
			FB.ensureInit(callback);
		}
		else {
			FB_RequireFeatures(Facebook.features, function() {
				var debug = FB.FBDebug;
				debug.logLevel = Facebook.debug.level;
				debug.isEnabled = Facebook.debug.enabled;
				FB.Facebook.init( 
					Facebook.api_key, 
					Facebook.static_receiver
				);
				Facebook.is_initialized = true;
				Facebook.api = FB.Facebook.apiClient;
				FB.ensureInit(callback);
			} );
		}
	}
}

/* Load the user session. It's hacky, but it's the only way I've been able
to get it to work.
*/
Facebook.load_user_session = function() {
	if( !BF_STATIC.facebook_enabled ) return; 
	Facebook.fireEvent('user_not_logged_in',{});
	Facebook.execute( function() {
		FB.Facebook.get_sessionState().waitUntilReady( function() {
			var user = FB.Facebook.apiClient.get_session() ?
				FB.Facebook.apiClient.get_session().uid :
				null;
			if ( ! user ) {
				Facebook.fireEvent('user_not_logged_in',{});
				return;
			}
			Facebook.uid = user;
			Facebook.fireEvent('user_logged_in',{
				success: true,
				uid: user
			});
			Facebook.fireEvent('load_user_session', {});
		});
	});
}

/* Load info for currently logged in user. 
For available params see: http://wiki.developers.facebook.com/index.php/Users.getInfo
*/
Facebook.user_info_fields = new Array(
	'first_name','last_name','uid','pic','name','locale','profile_url'
);
Facebook.load_user_info = function() {
	if( !BF_STATIC.facebook_enabled ) return; 
	Facebook.execute( function() {
		Facebook.api.users_getInfo( [Facebook.uid], 
			Facebook.user_info_fields, 
			function( results, exception ){
				if( results ) {
					Facebook.fireEvent( 'load_user_info', results[0] );
					Facebook.__err = 0;
				}
				else {
					if ( ! Facebook.__err || Facebook.__err < 3) {
						window.setTimeout( function(){ Facebook.__err = Facebook.__err ? Facebook.__err + 1 : 1;Facebook.load_user_info() }, 1000 );
					}
					if ( Facebook.__err == 3 ){
						var user = new BF_User();
						if (user.isLoggedIn() && user.getUserInfo().registration_path=='facebook') {
							user_nav.signout();
							$('usernav-signout').hide();
							$('usernav-signup').show();
							$('usernav-signin').show();
						}
					}
				}
			} 
		);
	});
}

/* Post something to the user's wall.
*/
Facebook.BADGE_MAP = {
	'lol':{abbr1:'LOL',abbr2:'LOL!',abbr3:'LOL?'},
	'omg':{abbr1:'OMG',abbr2:'OMG!!!',abbr3:'OMG?'},
	'wtf':{abbr1:'WTF',abbr2:'WTF?!?',abbr3:'WTF?'},
	'cute':{abbr1:'cute',abbr2:'So cute!',abbr3:'Cute?'},
	'geeky':{abbr1:'geek',abbr2:'So geeky!',abbr3:'Geeky?'},
	'trashy':{abbr1:'trashy',abbr2:'So trashy!',abbr3:'Trashy?'},
	'ew':{abbr1:'ew',abbr2:'Ew!',abbr3:'Ew?'},
	'old':{abbr1:'old',abbr2:'That\'s old!',abbr3:'Old?'},
	'loves':{abbr1:'loved',abbr2:'love',abbr3:'Love It Too?'},
	'hates':{abbr1:'hated',abbr2:'breaks my heart',abbr3:'Hate It?'}
};
Facebook.QP_MAP = {
	'link':{qp:' a link ',response:'added a link '},
	'image':{qp:' an image ',response:'added an image '},
	'video':{qp:' a video ',response:'added a video '},
	'text':{qp:'',response:'responded '},
	'embed':{qp:' a file ',response:'added a file '},
	'enhanced':{qp:' some content ',response:'added content '}
};
Facebook.postToWall = function( type_of_post, params ) {
	if( !BF_STATIC.facebook_enabled ) return;
	if( ! Facebook.uid ) return;
	if ( params.draft ) return;
	if ( params.uri && params.uri.match(/^\//) ) params.uri = params.uri.substring(1);
	if ( params.contest_id ) type_of_post = 'contest';
	eraseCookie( Facebook.generateCookieName());
	var user = new BF_User();
	if( params.raw_username ) params.username = params.raw_username;
	if( params.image_src ) {
		if(! params.image_src.match(/http:\/\//)) {
			params.image_src = BF_STATIC.fb_server_root + params.image_src;	
		}
		params.images = new Array({
			src : params.image_src,
			href: params.username ? 'http://www.buzzfeed.com/'+params.username+'/'+params.uri : 'http://www.buzzfeed.com/' + params.uri
		});
	}
	else if( params.thumb ) {
		if(! params.thumb.match(/http:\/\//)) {
			params.thumb = BF_STATIC.fb_server_root + params.image_src;	
		}
		params.images = new Array({
			src : BF_STATIC.fb_server_root + params.thumb,
			href: 'http://www.buzzfeed.com/'+params.username+'/'+params.uri
		});
		params.image_src = params.thumb;
	}
	var regex = /(<|&lt;).*?(>|&gt;)/g;
	var clean_up = ['caption','blurb','text','description','quiz_description','quiz_name','contest_name','title','result','parent_title','parent_blurb'];
	clean_up.each( function(key){
		if ( typeof params[key] != 'undefined' ) {
			if ( key == 'result' || key == 'quiz_description' ) params[key] = unescape(params[key]);
			params[key] = params[key].replace(regex,'');
			params[key] = BF_UI.renderEntities(params[key]);
		}
	});
	if ( type_of_post == 'love_hate' ) {
		params.one_line_story = '';//'{*actor*} ' + Facebook.BADGE_MAP[params.description].abbr1 + ' '+params.title+'.';
		params.user_msg_prompt = '';
		params.user_msg = params.description == 'loves' ?
		  'I love '+params.title+'!' :
		  params.title + ' breaks my heart!';
		params.action_prompt = Facebook.BADGE_MAP[params.description].abbr3;
		params.action_url = 'http://www.buzzfeed.com/'+params.uri;
	}
	else if ( type_of_post == 'badge' ) {
		params.one_line_story = '';//'{*actor*} thinks '+params.title+' was '+ Facebook.BADGE_MAP[params.description.toLowerCase()].abbr1+'.';
		params.user_msg_prompt = '';
		params.user_msg = Facebook.BADGE_MAP[params.description.toLowerCase()].abbr2;
		params.action_prompt = Facebook.BADGE_MAP[params.description.toLowerCase()].abbr3;
		params.action_url = 'http://www.buzzfeed.com/'+params.uri;
	}
	else if ( type_of_post == 'quickpost' ) {
		params.one_line_story = '';//'{*actor*} posted '+params.title+'.';
		params.user_msg_prompt = '(Promote Your Post)';
		params.user_msg = 'just posted '+params.title+' to BuzzFeed!';
		params.action_prompt = 'Respond'
		params.action_url = 'http://www.buzzfeed.com/'+params.username+'/'+params.uri;
	}
	else if ( type_of_post == 'contest' ) {
		params.one_line_story = '';//'{*actor*} posted '+params.title+' to the '+params.contest_name+' contest.';
		params.user_msg_prompt = '(Promote Your Entry)';
		params.user_msg = 'just posted '+params.title+' to the '+ params.contest_name +' contest. Help my entry win!';
		params.action_prompt = 'Share Like Crazy'
		params.action_url = 'http://www.buzzfeed.com/'+params.username+'/'+params.uri;
	}
	else if ( type_of_post == 'quiz_result' ) {
		if ( !params.description && params.quiz_description ) params.description = params.quiz_description;
		params.blurb = params.description;
		params.one_line_story = '{*actor*} took the '+unescape(params.quiz_name)+' quiz on BuzzFeed and got '+unescape(params.result)+'.';
		params.user_msg_prompt = 'What\'s on your mind';
		params.user_msg = '';
		params.action_prompt = 'Take the Quiz!';
		params.action_url = params.uri;
	}
	else { // contribution
		params.one_line_story = '';//'{*actor*} ' + Facebook.QP_MAP[params.type].response + ' to '+params.parent_title+'.';
		params.title = params.parent_title;
		params.blurb = params.parent_blurb;
		params.user_msg_prompt = '';
		params.user_msg = params.caption ? params.caption : params.text ? params.text : '';
		if ( params.user_msg.length > 200 ) {
			var end_at = params.user_msg.indexOf(' ', 200);
			if ( end_at == -1 ) end_at = 200;
			params.user_msg = params.user_msg.substring(0, end_at) + '...';
		}
		params.action_prompt = 'Respond'
		params.action_url = 'http://www.buzzfeed.com/'+params.parent_username+'/'+params.parent_uri;
	}
	params.images.each( function(el){
		el.src = el.src.replace('http://dev.buzzfeed.com/','http://facebook-dev.buzzfeed.com:8080/');
		el.type = 'image';
	});
	var deleted_image_count = 0;
	for( var i = 0; i < params.images.length; i++ ) {
		if ( params.images[i].src.split( '/' ).length == 3 ) {
			delete( params.images[i] );
			deleted_image_count++;
		}
	}
	if ( deleted_image_count == params.images.length ) delete ( params.images );
	FB.Connect.streamPublish(params.user_msg, {
		name:params.title,
		href:params.action_url,
		description:params.blurb,
		media:params.images,
		caption:params.one_line_story
	}, [{text:params.action_prompt,href:params.action_url}], null, params.user_msg_prompt, null, true, null );
}

/* Poor man's event model. All the callbacks were killing me.
*/
Facebook.observe = function( e, fn, opts ) {
	if( !BF_STATIC.facebook_enabled ) return; 
	Facebook.__events[e].listeners.push( fn );
	if (opts && opts.waitForPage) { 
		Facebook.__eventsWaitForPage[ e ].listeners.push( fn );
	}
	if ( opts && opts.retroactive ) {
		if ( Facebook.__events[e].already_fired ) fn();
	}
}

Facebook.fireEvent = function( e, params ) {
	if( !BF_STATIC.facebook_enabled ) return; 
	var listeners = Facebook.__events[ e ].listeners;
	if( listeners && listeners.length > 0 ) {
		for( var i = 0; i < listeners.length; i++ ) {
			try {
				listeners[ i ]( params );
			} catch ( e ) { }
		}
	}
	try {
		Facebook.__events[ e ].already_fired = true;
	} catch ( e ) {}
}

Facebook.fireEventOnce = function( e, params ) {
	if( !BF_STATIC.facebook_enabled ) return; 
	if( Facebook.__events[ e ].already_fired ) return;
	Facebook.fireEvent( e, params );
}

/* Probably could do without it, but this is just a safe way
of showing facebook-specific elements
*/
Facebook.show = function( el ) {
	if( !BF_STATIC.facebook_enabled ) return; 
	if( Facebook.eventMap[ el ].exists ) {
		$( el ).show();
	}
	else if( Facebook.eventMap[ el ].checkAgain ) {
		window.setTimeout( function(){Facebook.show(el)}, 1000 );
		Facebook.eventMap[ el ].checkAgain = false;
	}
}

/* Probably could do without it, but this is just a safe way
of hiding facebook-specific elements
*/
Facebook.hide = function( el ) {
	if( !BF_STATIC.facebook_enabled ) return; 
	if( Facebook.eventMap[ el ].exists ) {
		$( el ).hide();
	}
}

Facebook.hideContributionCheckbox = function() {
	if( !BF_STATIC.facebook_enabled ) return; 
	if( Facebook.uid != null ) Facebook.hide( 'facebook_post_contribution' );
}

Facebook.showContributionCheckbox = function() {
	if( !BF_STATIC.facebook_enabled ) return; 
	if( Facebook.uid != null ) Facebook.show( 'facebook_post_contribution' );
}

Facebook.user_is_logged_in = function() {
	if( !BF_STATIC.facebook_enabled ) return; 
	return ( Facebook.uid != null );
}

Facebook.redirect = function() {
	if( !BF_STATIC.facebook_enabled ) return; 
	var obj = new Object();
	obj.next = window.location.href;
	var searchString = window.location.search;
	if( searchString.length > 0 ) {
		var pairs = searchString.substring( 1 ).split( '&' );
		for( var i = 0; i < pairs.length; i++ ) {
			var key_vals = pairs[ i ].split( '=' );
			obj[ key_vals[ 0 ] ] = unescape( key_vals[ 1 ] );
		}
	}
	window.location.href = obj.next;
}

Facebook.limitReloads = function(){
	var cookie_name = 'fb_limit';
	var expiration_key = 'expire';
	var time_in_seconds = 60;
	var cookie_name = BFW_Util.getCookie(cookie_name);
	if ( cookie_name && cookie_name == expiration_key ) return true;
	BFW_Util.setCookie({name:cookie_name,seconds:time_in_seconds,value:expiration_key});
	return false;
}

Facebook.reloadPage = function(args) {
	if( !BF_STATIC.facebook_enabled ) return; 
	if ( Facebook.stopReloading ) return;
	if ( Facebook.limitReloads() ) return;
	if ( window.location.pathname.match(/\/contests\//) ) return;
	if(! args ) args = {};
	newPage = unescape(window.location.pathname);
	newPage += '?cb=' + (new Date()).getTime() ;
	if( !args.contribution ) newPage += '&contribution=false';
	else newPage += '#respond';
	if( $('facebook-login-status') ) $('facebook-login-status').show();
	window.location.href = newPage;
}

Facebook.requireLogin = function( fn ) {
	if( !BF_STATIC.facebook_enabled ) return; 
	Facebook.stopReloading = true;
	Facebook.execute( function() {
		FB.Connect.requireSession(fn);
	});
}

Facebook.login = function() {
	if( !BF_STATIC.facebook_enabled ) return; 
	Facebook.execute( function() {
		FB.Connect.requireSession(true);
	});
	Facebook.fireEvent( 'user_logged_in', {} );
}

Facebook.logout = function( fn ) {
	if( !BF_STATIC.facebook_enabled || !Facebook.uid ) {
		if( fn ) fn(); 
		return;
	}
	Facebook.execute( function() {
		FB.Connect.logout( function( result ) {
			if ( typeof fn != 'undefined' ) fn();
		});
		Facebook.fireEvent( 'user_not_logged_in', {} );
	});
}

Facebook._integrated_registration = function( data ) {
	if( !BF_STATIC.facebook_enabled ) return; 
	Facebook.hide('facebook_registration_linking');
	Facebook.show('facebook_registration_linked');
	Facebook.show('import_fb_profile');
	if( $('register-name') ) $('register-name').value = data.name;
	var frm = $('regsitration-form');
	if( frm ) {
		var apiclient = FB.Facebook.apiClient;
		var sessionRecord;
		sessionRecord = apiclient.get_session();
		data.session_key = sessionRecord.session_key;
		var inputField = document.createElement( 'input' );
		inputField.setAttribute( 'type', 'hidden' );
		for( var each in data ) {
			inputField.id = 'facebook-' + each;
			inputField.setAttribute( 'name', 'facebook-' + each );
			inputField.setAttribute( 'value', data[ each ] );
			frm.appendChild( inputField.cloneNode( true ) );
		}
	}
}

Facebook.auto_log_into_buzzfeed = function( fb_info ) {
	if( !BF_STATIC.facebook_enabled ) return; 
	var user = new BF_User();
	if ( user.isLoggedIn() ) return;
	try {
		var params = { facebook_uid: Facebook.uid,fb_username: fb_info.name };
		if( $('facebook-user-login-status') ) $('facebook-user-login-status').show();
		new Ajax.Request('/bfcgi/_www_login?cb='+Math.random()*100000, {
			method: 'post', 
			parameters: params, 
			onSuccess: function(r) { 
				var json = eval('('+r.responseText+')');
				if( !json.login ){
					if(window.location.href.indexOf('/signin')!=-1) {
						Facebook.__link_accounts = true;
						bf_login.switch_to_link_accounts();
						/*
						Facebook.auto_register({ 
							suggestions: json, 
							user_info : fb_info 
						});
						*/
					}
					else {
						Facebook.hidden_register({
							suggestions: json,
							user_info : fb_info
						});
					}
				}
				else {
					bf_login.loggedIn(r); 
					if(window.location.href.indexOf('/signin')!=-1)
						window.location.href='/'+username ;
					else {
						Facebook.reloadPage();
					}
				}
			}, onFailure: function() { 	
					if( $('facebook-user-login-status') ) $('facebook-user-login-status').hide();					
					Facebook.auto_register
				}
		});
	} 
	catch( e ) { 
		window.setTimeout( function() {
			auto_log_into_buzzfeed( fb_info );
		}, 1000);
	}
}

Facebook.promptForPermissionFlag = function() {
	createCookie('fb_promptForPermission','true');
}

Facebook.promptForPermission = function() {
	var prompt = readCookie( 'fb_promptForPermission' );
	if( prompt ) {
		eraseCookie( 'fb_promptForPermission' );
		Facebook.stopReloading = true;
		//Facebook._promptForPermission();
		Facebook.execute(Facebook._promptForPermission);
	}
}

Facebook._promptForPermission = function( perm ) {
	Facebook.api.users_hasAppPermission('email', function(r,e){
		var json = eval( '('+r+')' );
		if( json == 0 ) {
			FB.Connect.showPermissionDialog( 'email' );
		}
	});
}

Facebook.hidden_register = function( raw_data ) {
	if ( !BF_STATIC.facebook_enabled ) return; 
	Facebook.promptForPermissionFlag();
	var name = raw_data.user_info.name;
	var fields = name.split(' ');
	if ( fields.length > 1 ) {
		name = fields[0] + ' ' + fields[ fields.length-1 ].substring(0,1) + '.';
	}
	var email = 'get_from_facebook@buzzfeed.com';
	var username = raw_data.suggestions.username;
	var pw1 = raw_data.suggestions.password;
	var agreed = true;
	var emailme = 1;
	var import_fb_profile = 'true';
	var facebook_uid = Facebook.uid;
	var params = { name: name, username: username, pw: pw1, email: email, contribute: 1, allow_email_updates: emailme, facebook_uid: facebook_uid, import_fb_profile : import_fb_profile } 
	var contribution = 1;
	if ( bf_login && bf_login.args && bf_login.args.action == 'badge_vote' ) {
		contribution = 0;
	}
	new Ajax.Request('/buzzfeed/_contribute_register', {method: 'post', parameters: params, onSuccess: function(e) {
		Tracker.gClick('/_facebook_registered');
		Facebook.reloadPage({contribution:contribution});
		if (typeof contest_manager != 'undefined' && contest_manager.onLogin){
			contest_manager.onLogin()
		}
	}, onFailure: function(e){}});
}

Facebook.auto_register = function( raw_data ) {
	if ( !BF_STATIC.facebook_enabled ) return; 
	Facebook.promptForPermissionFlag();
	//if ( !Facebook.explicit_login ) return;
	$('fb-register-submit').observe('click',function(){
		var fb_reg_msg = $('facebook-registration-message');
		if ( fb_reg_msg ) {
			fb_reg_msg.update(
				'Please Wait While We Contact Facebook...'
			);
			fb_reg_msg.show();
		}
		Tracker.gClick('/_facebook_registered');
	});
	var name = raw_data.user_info.name;
	var fields = name.split(' ');
	if ( fields.length > 1 ) {
		name = fields[0] + ' ' + fields[ fields.length-1 ].substring(0,1) + '.';
	}
	$('login-form').hide();
	$('regsitration-form').hide();
	$('facebook-registration-form').show();
	$('fb-facebook-uid').value = Facebook.uid;
	$('fb-register-username').value = raw_data.suggestions.username;
	$('fb-register-name').value = name;
	$('fb-bfe').value = 'test@test.com';
	$('fb-register-pw1').value = raw_data.suggestions.password;
}

Facebook.link_accounts = function() {
	if ( !BF_STATIC.facebook_enabled ) return; 
	if ( Facebook.__link_accounts ) {
		try{
		new Ajax.Request( '/buzzfeed/_edit_user', {
			method : 'get',
			asynchronous : false,			
			parameters : { 
				action: 'link_facebook_account' ,
				facebook_uid : Facebook.uid,
				onSuccess : function( r ) { },
				onFailure : function( r ) { }
			}
		});
		} catch(e){}
	}
}

Facebook.eventMap = { 	facebook_logout_button: {
				event: 'click',
				method: Facebook.logout,
				xcheckAgain: true 
			},
			facebook_login_button: {
				event: 'click',
				method: Facebook.login,
				xcheckAgain: true
			}, 
			facebook_post_contribution: {
				exists : false,
				checkAgain : true
			},
			facebook_add_app_button: {},
			facebook_registration_promo: {},
			facebook_registration_linking: {},
			facebook_registration_linked: {},
			import_fb_profile: {}
};

Facebook.waitForJS = function() {
	if ( typeof FB == 'undefined' )
//	|| typeof FB.FeatureLoader == 'undefined'
//	|| typeof FB.FeatureLoader.singleton == 'undefined'
//	|| typeof FB.FeatureLoader.singleton._scriptsToLoad == 'undefined'
//	|| typeof FB.FeatureLoader.singleton._loadedFeatures == 'undefined'
//	|| typeof FB.FeatureLoader.singleton._loadedFeatures.XFBML == 'undefined'
//	|| typeof FB.FeatureLoader.singleton._scriptsToLoad.length > 0 )
	{
		setTimeout( "Facebook.waitForJS()", 200 );
	}
	else
	{
		try{
		FB.Bootstrap.IsDomContentReady = true;
		Facebook.init();
		} catch(e){
			setTimeout( "Facebook.waitForJS()", 200 );
		}
	}
};

// Below are the events that this facebook library fires
Facebook.__events = {
	load_user_info: { 
		listeners: new Array(),
		already_fired: false
	},	
	load_user_session: {
		listeners: new Array(),
		already_fired: false
	},
	user_logged_in: {
		listeners: new Array(),
		already_fired: false
	},
	user_not_logged_in: {
		listeners: new Array(),
		already_fired: false
	},
	initialization_complete: {
		listeners: new Array(),
		already_fired: false
	}
};
Facebook.__eventsWaitForPage = new Object();
for( var each in Facebook.__events ) {
	Facebook.__eventsWaitForPage[each] = { listeners:new Array() };
}
