com.ag.favoriteModule = {
	favoriteContainer: '.favorite',
	isFavorite: false,
	init: function () {
		if(LoginModule.isUserLoggedIn()){
			com.ag.favoriteModule.isAlreadyFavorited();
		}
		AgEvent.LOGIN.subscribe(com.ag.favoriteModule.isAlreadyFavorited);
		AgEvent.LOGOUT.subscribe(com.ag.favoriteModule.displayDefaultOrFavorited);

		$('.favorite').unbind();
		$('.favoriteGameInfo').click(com.ag.favoriteModule.loginThenFavorite);
		$('.favoriteGameAction').click(com.ag.favoriteModule.loginThenFavorite);
	},
	displayDefaultOrFavorited: function () {
		if (LoginModule.isUserLoggedIn() && com.ag.favoriteModule.isFavorite){
			com.ag.favoriteModule.showAlreadyFavorited();
		}else{
			com.ag.favoriteModule.showLoggedOutFavorite();
		}
	},
	getFavoriteToPost: new com.ag.jsonRequest(),
	addFavorite: function () {
		var postUrl = "/dynamic/services";
		var message = com.ag.favoriteModule.getFavoriteToPost; // stub the context for readability
		message.method = "favorites.add";
		message.params[0] = {
					gameId: com.ag.gamePageGameId,
					uuid: LoginModule.loginCookie.cookie(LoginModule.USER_UUID_SESSION_COOKIE)
				};
		$.post( postUrl, JSON.stringify(message), function (data) { // Callback
			var obj = data;
			if(obj.result){
				com.ag.favoriteModule.isFavorite = true;
				com.ag.favoriteModule.showAlreadyFavorited();
			}else{
				//{"id":1,"result":null,"error":{"messages":[],"fields":{"messages":{"action":"FAVORITES_COLLECTION_FULL","maxSize":50}}}}
				com.ag.favoriteModule.errorOver50();
			}
		});
		if (com.ag.loginFB.isFBLoggedIn) {
			FacebookRegisterModule.facebookPostToWall("GameFavorite", com.ag.gamePageGameId);
		}
	},
	errorOver50: function () {
		var errorDialog = new com.ag.ModalOverlay('You can only favorite up to 50 games.<p><input type="submit" value="OK" class="button_primary" id="over50FavoritesOk"></p>', {'headerText':'Favorites Collection Full','closeCancel':'none'});

		errorDialog.show();
		$('#over50FavoritesOk').click( function (){
			errorDialog.close();
			return false;
		});
	},
	isLoggedIntoFB: function(){
		FB.getLoginStatus(function (response) {
			return response.session
		});
	},
	loginThenFavorite: function () {
		if(LoginModule.isUserLoggedIn()){
			com.ag.favoriteModule.addFavorite();
		}else{
			AgEvent.LOGIN.subscribeOnce(com.ag.favoriteModule.addFavorite);
			AgEvent.REGISTER.subscribeOnce(com.ag.favoriteModule.addFavorite);
			LoginModule.showLogin({'headerMessage':'You must be logged in to access this feature.'});
		}
	},
	showAlreadyFavorited: function (){
		$(com.ag.favoriteModule.favoriteContainer).unbind();
		$(com.ag.favoriteModule.favoriteContainer).text('FAVORITED!');
		$(com.ag.favoriteModule.favoriteContainer).removeClass('addFavorite');
		$(com.ag.favoriteModule.favoriteContainer).addClass('favorited');
	},
	showLoggedOutFavorite: function () {
		//$('.favoriteGameInfo').click(com.ag.favoriteModule.loginThenFavorite);
		//$('.favoriteGameAction').click(com.ag.favoriteModule.loginThenFavorite);
		$(com.ag.favoriteModule.favoriteContainer).text('FAVORITE');
		$(com.ag.favoriteModule.favoriteContainer).removeClass('favorited');
		$(com.ag.favoriteModule.favoriteContainer).addClass('addFavorite');
	},
	getAlreadyFavorited: new com.ag.jsonRequest(),
	isAlreadyFavorited: function () {
		var postUrl = "/dynamic/services";
		var message = com.ag.favoriteModule.getAlreadyFavorited; // stub the context for readability
		message.method = "favorites.isFavorite";
		message.params[0] = {
			gameId: com.ag.gamePageGameId,
			types: ["favorites"],
			uuid: LoginModule.loginCookie.cookie(LoginModule.USER_UUID_SESSION_COOKIE)
		};
		$.post( postUrl, JSON.stringify(message), function (data) { // Callback
			com.ag.favoriteModule.isFavorite = data.result;
			com.ag.favoriteModule.displayDefaultOrFavorited();
		});
	}
};
$(document).ready(function (){
	com.ag.favoriteModule.init();
});
