var fbLike = {

	Layout: {

		UpdateLikeMessage: function(str) {
			d3cmsfb.Log('fbLike.Layout->UpdateLikeMessage()');

			if (!d3cmsfb._enabled) {
				fbLike.Layout.IE8Fix(str);
				return;
			}

			if (!str || str == 'default') { //single like mode
				str = 'default';

				$j("span.fbLike_" + str).html('You like this');
				$j("div.fbLike_" + str).removeAttr("onclick");
			}
			else { //multilike mode
				$j("a.fbLike_" + str).html('You like this');
				$j("a.fbLike_" + str).removeAttr("onclick");
			}
		},

		IE8Fix: function(str) {
			d3cmsfb.Log('fbLike.Layout->IE8Fix()');

			if (!str || str == 'default') { //single like mode
				str = 'default';

				$j("div.LikeThisBox").hide();
				$j("span.fbLike_" + str).html('Share with Facebook');
			}
			else { //multilike mode
				$j("a.fbLike_" + str).html('Share with Facebook');
			}
		}

	},

	_objectMetadata: null,
	_liking: false,

	Init: function(obj) {
		d3cmsfb.Log('fbLike->Init()');

		fbLike._objectMetadata = obj;

		if (!d3cmsfb._enabled) {
			fbLike.Layout.IE8Fix('default');
		}

		if (obj) {
			if (d3cmsfb.AlreadyLikeThis(obj))
				fbLike.Layout.UpdateLikeMessage('default');
		}

	},

	Like: function(objectMetadata) {
		d3cmsfb.Log('fbLike->Like()');

		if (!objectMetadata && !fbLike._objectMetadata)
			return;

		if (fbLike._liking)
			return;

		var objStr = 'default';
		if (objectMetadata)
			objStr = objectMetadata.ID;
		else
			objectMetadata = fbLike._objectMetadata;

		if (d3cmsfb.AlreadyLikeThis(objectMetadata)) {
			fbLike.Layout.UpdateLikeMessage(objStr);
			return;
		}

		fbLike._liking = true;

		if (!d3cmsfb._enabled)
			d3cmsfb.Like(function() { fbLike._liking = false; fbLike.Layout.UpdateLikeMessage(objStr); }, objectMetadata);

		FB.login(
			function(response) {
				if (response.session) {
					d3cmsfb.GetUser(function(user) {
						fbLike._handleSession(user, objStr, objectMetadata)
					});
				}
			},
			{ perms: d3cmsfb.DefaultPermissions }
		);
	},

	_handleSession: function(user, objStr, objectMetadata) {
		d3cmsfb.Log('fbLike->_handleSession()');
		if (user) {
			d3cmsfb.Like(function() {
				fbLike._liking = false;
				fbLike.Layout.UpdateLikeMessage(objStr);
			}, objectMetadata);
		}
		else
			fbLike._liking = false;
	}
};
