window.fbAsyncInit = function() {
	FB.init( {
		appId : fbAppId,
		cookie : true,
		status : true,
		xfbml : true
	});

	FB.getLoginStatus(function(response) {
		updateLoginStatus(response);
	});

	FB.Event.subscribe('auth.sessionChange', function(response) {
		updateLoginStatus(response);
	});
};

$(function() {
	hookLinks();
});

function hookLinks() {
	$('.fb-login-link').unbind('click');
	$('.fb-logout-link').unbind('click');
	$('.logout-link').unbind('click');
	$('.login-link').unbind('click');
	$('#use-fb-email-link').unbind('click');
	$('#share-order-on-fb').unbind('click');
	$('#fb-disconnect').unbind('click');

	$('.fb-login-link').click(function() {
		fbLoginClicked();
		return false;
	});

	$('.fb-logout-link').click(function() {
		fbLogoutClicked();
		return false;
	});

	$('.logout-link').click(function() {
		logoutClicked();
		return false;
	});

	$('.login-link').click(function() {
		loginClicked();
		return false;
	});
	
	$('#fb-disconnect').click(function() {
		trackEvent('User accounts', 'Facebook disconnect account', null, null);
	});

	$('#use-fb-email-link').click(function() {
		FB.login(function(response) {
			if(response.perms) {
				trackEvent('User accounts', 'Facebook email access granted', null, null);
				window.location = '/login/fb-login/act/grant-fb-email/';
			} else {
				trackEvent('User accounts', 'Facebook email access refused', null, null);
				window.location = '/login/fb-login/act/deny-fb-email/';
			}
		}, {
			perms : 'email'
		});
		return false;
	});
	
	$('#share-order-on-fb').click(function() {
		trackEvent('User accounts', 'Facebook order share - button clicked', null, null);
		FB.login(function(response) {
			if(response.perms) {
				trackEvent('User accounts', 'Facebook order share - publish stream granted', null, null);
				tb_show(HAPPY_WITH_PURCHASE_BTN_TEXT, '/order/share-fb-modal/?height=140&width=500', null);
			} else {
				trackEvent('User accounts', 'Facebook order share - publish stream refused', null, null);
				$('#shareMsg').html(SOCIAL_SHARE_ACCESS_NOT_GRANTED);
				$('#shareMsg').addClass('message-error');
			}
		}, {
			perms : 'publish_stream'
		});
		return false;
	});
	
}

function fbLoginClicked() {
	trackEvent('User accounts', 'Facebook login', null, null);
	FB.login(function(response) {
		if (response.session) {
			window.location = '/login/fb-login/?backUrl=' + window.location.href;
		} else {
			// nothing to do
		}
	});
}

function fbLogoutClicked() {
	trackEvent('User accounts', 'Facebook logout', null, null);
	FB.logout(function(response) {
		logout();
	});
}

function logoutClicked() {
	trackEvent('User accounts', 'Logout', null, null);
	logout();
}

function logout() {
	params = {};
	params.url = window.location.href;
	
	$.getJSON('/login/ajax-logout/', params, function(json) {
		onLogoutClicked(json);
	});
}

function onLogoutClicked(json) {
	if (json.url != null) {
		window.location = json.url;
	} else {
		FB.getLoginStatus(function(response) {
			updateLoginStatus(response);
		});
	}
}

function loginClicked() {
	trackEvent('User accounts', 'Login', null, null);
	window.location = $('.login-link').attr('href');
}

function updateLoginArea(html) {
	$('#login-area').html(html);
	hookLinks();
}

function updateLoginStatus(response) {
	cLogin = $('#login-link').size();
	cFbLogin = $('.fb-login-link').size() > 0 ? 1:0;
	
	currentStatusNeeded = checkIfCurrentStatusNeeded(response.status, cLogin, cFbLogin);
	
	// alert('updateLoginStatus - ' + response.status + ', ' + currentStatusNeeded);
	
	if(currentStatusNeeded) {
		params = {};
		params.cLogin = cLogin;
		params.cFbLogin = cFbLogin;
		params.response = JSON.encode(response);
		params.url = window.location.href;

		$.getJSON('/login/status/', params, onUpdateLoginStatus);
	}
}

function checkIfCurrentStatusNeeded(responseStatus, cLogin, cFbLogin) {
	if(responseStatus == 'unknown' && cFbLogin == 1) {
		return false;
	}
	return true;
}

function onUpdateLoginStatus(json) {
	// alert('onUpdateLoginStatus done ' + json.updateLoginStatus);

	if (json.url != null) {
		window.location = json.url;
		return;
	}

	if (json.updateLoginStatus) {
		updateLoginArea(json.loginHtml);
	}
}
