var BALLS = null;


(function ($) {
	var LEFT_MOST = 15;
	var TOP_MOST = 50;
	var PREV_LINK = null;
	var NEXT_LINK = '#rollover_community';

	BALLS = {
		_balls: {},
		_groups: {},
		_groupTabs: {},

		_currentBall: null,
		_currentGroup: null,
		_currentContent: null,

		_prevLink: PREV_LINK,
		_nextLink: NEXT_LINK,

		_setPreviousLink: function (prevLink) {
			BALLS._prevLink = prevLink;
			if (BALLS._prevLink == null) {
				$('#prev_link').hide();
			} else {
				$('#prev_link').show();
			}
		},

		_setNextLink: function (nextLink) {
			BALLS._nextLink = nextLink;
			$('#next_link').show();
		},

		addBall: function (id, groupName, x, y, contentId, previousLink, nextLink) {
			var element = $(id);
			var content = $(contentId);
			var theBall = {
				id: id,
				element: element,
				content: content,
				group: groupName,
				position: {x: x, y: y},
				contentId: contentId,
				previousLink: previousLink,
				nextLink: nextLink
			};

			BALLS._balls[id] = theBall;

			if (typeof(BALLS._groups[groupName]) == 'undefined') {
				BALLS._groups[groupName] = {
					'balls': [],
					'tab': null
				};
			}
			BALLS._groups[groupName].balls.push(id);

			element.hover(function () {
				$(this).css('background-position', '0 -120px');
			}, function () {
				$(this).css('background-position', '0 0');
			});

			element.click(function () {
				// The previous and next links
				BALLS._setPreviousLink(previousLink);
				BALLS._setNextLink(nextLink);

				for (ballId in BALLS._balls) {
					(function () {
						var ball = BALLS._balls[ballId];
						if (theBall.id == ballId) {
							if (BALLS._currentContent != theBall.content) {
								theBall.element.hide();
								theBall.element.css('left', LEFT_MOST);
								theBall.element.css('top', TOP_MOST);
								theBall.element.show();
								theBall.content.show();
							}
							BALLS._currentBall = theBall;
							if (BALLS._currentContent != null && BALLS._currentContent != theBall.content) {
								BALLS._currentContent.hide();
							}
							BALLS._currentContent = theBall.content;
							BALLS._currentGroup = theBall.group;
						} else {
							if (ball.element.css('display') != 'none') {
								ball.element.hide();
								ball.element.css('left', ball.position.x);
								ball.element.css('top', ball.position.y);
								ball.content.hide();
							}
						}
					})();
				}
			});
		},

		addGroupTab: function (id, groupName, groupContentId, previousLink, nextLink) {
			var element = $(id);
			var groupContent = $(groupContentId);

			var theGroup = {
				id: id,
				element: element,
				groupName: groupName,
				contentId: groupContentId,
				content: groupContent,
				previousLink: previousLink,
				nextLink: nextLink
			};
			BALLS._groupTabs[id] = theGroup;

			if (typeof(BALLS._groups[groupName]) == 'undefined') {
				BALLS._groups[groupName] = {
					'balls': [],
					'tab': null
				};
			}
			BALLS._groups[groupName].tab = theGroup;

			element.click(function elementHandler() {
				// The previous and next links
				BALLS._setPreviousLink(previousLink);
				BALLS._setNextLink(nextLink);

				// Sort out the content
				if (BALLS._currentContent != theGroup.content) {
					BALLS._groups[groupName].tab.element.parent().siblings().find('a').removeClass('selected');
					BALLS._groups[groupName].tab.element.addClass('selected');

					if (BALLS._currentContent != null) {
						BALLS._currentContent.hide();
					}
					theGroup.content.show();
				}

				// Sort out the balls
				for (ballId in BALLS._balls) {
					(function () {
						var ball = BALLS._balls[ballId];

						if (ball.element.css('display') != 'none') {
							ball.element.hide();
							if (ball.group == groupName) {
								ball.element.css('left', LEFT_MOST);
								ball.element.css('top', ball.position.y);
								ball.element.show();
							}
						} else {
							if (ball.group == groupName) {
								ball.element.css('left', LEFT_MOST);
								ball.element.css('top', ball.position.y);
								ball.element.show();
							}
						}
					})();
				}

				BALLS._currentBall = null;
				BALLS._currentContent = theGroup.content;
				BALLS._currentGroup = theGroup.groupName;

				return false;
			});

			element.mouseover(function () {
				element.click();
			});
		},

		reset: function () {
			BALLS.initBalls();

			if (BALLS._currentGroup != null) {
				BALLS._groups[BALLS._currentGroup].tab.element.removeClass('selected');
			}
			if (BALLS._currentGroup != null) {
				BALLS._currentContent.hide();
			}

			BALLS._currentBall = null;
			BALLS._currentGroup = null;
			BALLS._currentContent = null;
		},

		initBalls: function () {
			for (ballId in BALLS._balls) {
				var ball = BALLS._balls[ballId];
				ball.element.show()
					.css('left', ball.position.x)
					.css('top', ball.element.height() * -1)
					.animate({
						'top': ball.position.y
					}, 1250, 'easeOutBounce');
				ball.content.hide();
			}

			$('.rollover_content, .rollover_group_content').each(function () {
				var content = $(this);
				if (content.find('.close').size() == 0) {
					var closer = $('<span class="close"></span>');
					closer.click(BALLS.reset);
					content.append(closer);
				}
			});

			BALLS._setPreviousLink(PREV_LINK);
			BALLS._setNextLink(NEXT_LINK);
		}
	}

	$(function () {
		BALLS.addBall('#rollover_ball_01', 'Community', LEFT_MOST, 80, '#rollover_content_01', '#rollover_community', '#rollover_ball_02');
		BALLS.addBall('#rollover_ball_02', 'Community', LEFT_MOST, 210, '#rollover_content_02', '#rollover_ball_01', '#rollover_talent');
		BALLS.addBall('#rollover_ball_03', 'Talent', 119, 80, '#rollover_content_03', '#rollover_talent', '#rollover_ball_04');
		BALLS.addBall('#rollover_ball_04', 'Talent', 119, 210, '#rollover_content_04', '#rollover_ball_03', '#rollover_competitions');
		BALLS.addBall('#rollover_ball_05', 'Competitions', 223, 80, '#rollover_content_05', '#rollover_competitions', '#rollover_ball_06');
		BALLS.addBall('#rollover_ball_06', 'Competitions', 223, 210, '#rollover_content_06', '#rollover_ball_05', '#rollover_nationalteams');
		BALLS.addBall('#rollover_ball_07', 'NationalTeams', 327, 80, '#rollover_content_07', '#rollover_nationalteams', '#rollover_ball_08');
		BALLS.addBall('#rollover_ball_08', 'NationalTeams', 327, 210, '#rollover_content_08', '#rollover_ball_07', '#rollover_events');
		BALLS.addBall('#rollover_ball_09', 'Events', 431, 50, '#rollover_content_09', '#rollover_events', '#rollover_ball_10');
		BALLS.addBall('#rollover_ball_10', 'Events', 431, 150, '#rollover_content_10', '#rollover_ball_09', '#rollover_ball_11');
		BALLS.addBall('#rollover_ball_11', 'Events', 431, 250, '#rollover_content_11', '#rollover_ball_10', '#rollover_community');

		BALLS.addGroupTab('#rollover_community', 'Community', '#rollover_group_content_community', '#rollover_ball_11', '#rollover_ball_01');
		BALLS.addGroupTab('#rollover_talent', 'Talent', '#rollover_group_content_talent', '#rollover_ball_02', '#rollover_ball_03');
		BALLS.addGroupTab('#rollover_competitions', 'Competitions', '#rollover_group_content_competitions', '#rollover_ball_04', '#rollover_ball_05');
		BALLS.addGroupTab('#rollover_nationalteams', 'NationalTeams', '#rollover_group_content_nationalteams', '#rollover_ball_06', '#rollover_ball_07');
		BALLS.addGroupTab('#rollover_events', 'Events', '#rollover_group_content_events', '#rollover_ball_08', '#rollover_ball_09');

		$('#next_link').click(function () {
			$(BALLS._nextLink).click();
			return false;
		});

		$('#prev_link').click(function () {
			$(BALLS._prevLink).click();
			return false;
		});
	});

	$(window).load(BALLS.initBalls);
})(jQuery);
