(function( $ ){
	toggleFavoriteClass = function(el, newClass){
		if(newClass != "favoriteNoFav" && newClass != "favoriteIsFav" && newClass != "favoriteLoading"){
			return;
		}
		el.removeClass("favoriteNoFav");
		el.removeClass("favoriteIsFav");
		el.removeClass("favoriteLoading");
		el.addClass(newClass);
		
		p = el.parent();
		if(p.hasClass("favoriteNoFav") || p.hasClass("favoriteIsFav") || p.hasClass("favoriteLoading") ){
			p.removeClass("favoriteNoFav");
			p.removeClass("favoriteIsFav");
			p.removeClass("favoriteLoading");
			p.addClass(newClass);
		}
	};
	
	$.fn.favoriteButton = function( options ) {
		
		
		var settings = {
			notFavoriteClass : 'favoriteNoFav',
			favoriteClass : 'favoriteIsFav',
			hoverClass : 'favoriteHover',
			loadingClass : "favoriteLoading"
		};
		if ( options ) { 
			$.extend( settings, options );
		}
		$(this).hover(function () {
			$(this).addClass(settings.hoverClass);
		}, function () {
			$(this).removeClass(settings.hoverClass);
		});
		$(this).click(function(){
			var clicked = $(this);
			if(clicked.hasClass(settings.notFavoriteClass)){
				toggleFavoriteClass(clicked, settings.loadingClass);
				$.ajax({
					url: '/home/club/favorites/add.do?games='+clicked.attr("game"),
					success: function(data) {
						toggleFavoriteClass(clicked, settings.favoriteClass);
					}
				});
			}
			if(clicked.hasClass(settings.favoriteClass)){
				toggleFavoriteClass(clicked, settings.loadingClass);
				$.ajax({
					url: '/home/club/favorites/remove.do?games='+clicked.attr("game"),
					success: function(data) {
						toggleFavoriteClass(clicked, settings.notFavoriteClass);
					}
				});
			}
		});
		return this;
	};
})(jQuery);
