(function($) {
	/*
	 * Append social-js class to html element. This allows us to prevent JS FOUC
	 * in an accessible way.
	 * Run it ASAP. Doesn't need to run on domReady because the html element is
	 * the first thing available.
	 */
	var c = document.getElementsByTagName('html')[0];
	c.className += ' social-js';

	$(function() {
		var $window = null;
		var $auth_window = null;
		var auth_poll = null;
		$('.social-login').click(function(e) {
			e.preventDefault();

			$window = $(this);
			$auth_window = window.open($(this).attr('href'), "ServiceAssociate", 'width=700,height=400');

			auth_poll = setInterval(function() {
				if ($auth_window.closed) {
					clearInterval(auth_poll);

					if (!$window.hasClass('comments')) {
						window.location.reload();
					}
					else {
						var $parent = $('.social-post');
						$.post($parent.find('#reload_url').val(), {}, function(response) {
							if (response.result == 'success') {
								// Add logged-in body class since we're not going to be refreshing the page.
								$('body').addClass('logged-in');

								var $cancel = $('#cancel-comment-reply-link');
								var $parent = $cancel.closest('li');
								$cancel.click();
								$('#respond').replaceWith(response.html);
								$parent.find('.comment-reply-link').click();

								$('#primary').find('#social_login').parent().html(response.disconnect_url);
							}
						}, 'json');

						// Fix for the missing reply link
						$('#cancel-comment-reply-link').live('click', function() {
							jQuery('.comment-reply-link').show();
						});
					}
				}
			}, 100);
		});

		// comments.php
		if ($('#social').length) {
			// MCC Tabs
			var $prevLink = null;
			var prevLink = null;
			var $nextLink = null;
			var nextLink = null;
			if ($('#comments .nav-previous a').length) {
				$prevLink = $('#comments .nav-previous a');
				prevLink = $prevLink.attr('href');
			}

			if ($('#comments .nav-next a').length) {
				$nextLink = $('#comments .nav-next a');
				nextLink = $nextLink.attr('href');
			}

			$('.social-nav a').click(function(e) {
				e.preventDefault();
				$('#cancel-comment-reply-link').trigger('click');

				$('.social-current-tab').removeClass('social-current-tab');
				$(this).parent().addClass('social-current-tab');
				$('.social-items').removeClass('social-comment-collapse');

				var className = $(this).attr('rel');
				if (className == 'social-all') {
					if (nextLink !== null) {
						$nextLink.attr('href', nextLink);
					}

					if (prevLink !== null) {
						$prevLink.attr('href', prevLink);
					}

					$('.social-commentlist li').removeClass('social-comment-collapse');
				} else {
					$('.social-items:not(.' + className + ')').addClass('social-comment-collapse');
					$('.social-commentlist li').each(function() {
						if (!$(this).hasClass(className)) {
							$(this).addClass('social-comment-collapse');
						}
						else {
							$(this).removeClass('social-comment-collapse');
						}
					});

					if (prevLink !== null) {
						var _prevLink = prevLink.split('#comments');
						if (_prevLink.indexOf('?') == -1) {
							_prevLink[0] = _prevLink[0] + '?';
						}
						else {
							_prevLink[0] = _prevLink[0] + '&';
						}
						$prevLink.attr('href', _prevLink[0] + 'social_tab=' + className + '#comments');
					}

					if (nextLink !== null) {
						var _nextLink = nextLink.split('#comments');
						if (_nextLink.indexOf('?') == -1) {
							_nextLink[0] = _nextLink[0] + '?';
						}
						else {
							_nextLink[0] = _nextLink[0] + '&';
						}
						$nextLink.attr('href', _nextLink[0] + 'social_tab=' + className + '#comments');
					}
				}
			});

			$('.social-current-tab a').trigger('click');

			/**
			 * Inserts the Twitter username for the reply to content.
			 *
			 * @param $author
			 * @param $textarea
			 * @param extraContent
			 */
			function insertTwitterUsername($author, $textarea, extraContent) {
				var username = $author.html() + ' ';
				if (username.substr(0, 1) != '@') {
					username = '@' + username;
				}
				if (extraContent !== undefined) {
					username += extraContent;
				}

				var pos = username.length;

				$textarea.val(username);
				if ($textarea.get(0).setSelectionRange) {
					$textarea.focus();
					$textarea.get(0).setSelectionRange(pos, pos);
				} else if ($textarea.createTextRange) {
					var range = $textarea.get(0).createTextRange();
					range.collapse(true);
					range.moveEnd('character', pos);
					range.moveStart('character', pos);
					range.select();
				}

				var author_rel = $author.attr('rel').split(' ');
				$('#in_reply_to_status_id').val(author_rel[0]);
			}

			var $use_twitter_reply = $('#use_twitter_reply');
			$('.comment-reply-link').click(function() {
				$('.comment-reply-link').show();
				$(this).hide();
				var $parent = $(this).closest('li');
				var $textarea = $parent.find('textarea');
				if ($parent.hasClass('social-twitter') && $use_twitter_reply.val() == '1') {
					var $author = $parent.find('.social-comment-author a');
					insertTwitterUsername($respond.closest('li').find('.social-comment-author a'), $textarea);
				}
			});
			$('#cancel-comment-reply-link').click(function() {
				$('.comment-reply-link').show();
			});

			var $avatar = $('#commentform .avatar');
			var original_avatar = $avatar.attr('src');
			$('#post_accounts').live('change', function() {
				$(this).find('option:selected').each(function() {
					var avatar = $(this).attr('rel');
					if (avatar !== undefined) {
						$avatar.attr('src', avatar);
					} else {
						$avatar.attr('src', original_avatar);
					}
					var label = $(this).parent().attr('label');
					if (label !== undefined) {
						$('#post_to').show().find('span').html(label);

						if (label === 'Twitter') {
							var $respond = $('#respond');
							var $textarea = $respond.find('textarea');
							if ($respond.parent().hasClass('social-twitter')) {
								var content = $textarea.val();
								if (!content.length || content.substring(0, 1) != '@') {
									insertTwitterUsername($respond.closest('li').find('.social-comment-author a'), $textarea, content);
								}
							}
							$use_twitter_reply.val('1');
						} else {
							$use_twitter_reply.val('0');
						}
					} else {
						$('#post_to').hide();
					}
				});
			});
			$('#post_accounts').trigger('change');
		}

		/**
		 * Manual Aggregation
		 */
		var $social_comments_adminbar_item = $('#wp-admin-bar-social_find_comments');
		if ($social_comments_adminbar_item.size()) {
			var $social_spinner = $social_comments_adminbar_item.find('.social-aggregation-spinner');
			var $social_aggregation = $('#social_aggregation');
			var $comment_adminbar_item = $('#wp-admin-bar-comments');
			$social_aggregation.click(function(e) {
				if ($(this).attr('href') == '#') {
					e.preventDefault();
				}
			}).removeClass('running-aggregation');
			$comment_adminbar_item.removeClass('running-aggregation');

			$social_comments_adminbar_item.find('a').click(function(e) {
				e.preventDefault();
				if (!$comment_adminbar_item.hasClass('running-aggregation')) {
					$comment_adminbar_item.addClass('running-aggregation');

					// remove old results (slide left)
					$('#wp-adminbar-comments-social').animate({ width: '0' }, function() {
						$(this).remove();
					});

					// show spinner
					$comment_adminbar_item.find('#ab-awaiting-mod').hide().end()
						.find('a:first').append($social_spinner);
					$social_spinner.show();
					SocialLoadingInterval = setInterval(function() {
						var next = false;
						var $dots = jQuery('.social-aggregation-spinner').find('.social-dot');
						$dots.each(function() {
							var active = jQuery(this).hasClass('dot-active');
							if (next) {
								jQuery(this).addClass('dot-active');
							}
							if (active) {
								jQuery(this).removeClass('dot-active');
								next = true;
							}
							else {
								next = false;
							}
						});
						if ($dots.filter('.dot-active').size() == 0) {
							$dots.filter(':first').addClass('dot-active');
						}
					}, 425);

					// make AJAX call
					$.get(
						$(this).attr('href'),
						{ render: 'false' },
						function(response) {
							// hide spinner
							$social_spinner.hide();
							$social_comments_adminbar_item.append($social_spinner);
							clearInterval(SocialLoadingInterval);

							// update count, show count
							$comment_adminbar_item.find('#ab-awaiting-mod')
								.html(response.total).show();

							// show results (slide right)
							$comment_adminbar_item.addClass('social-comments-found').after(response.html);
							var $social_comments_found = $('#wp-adminbar-comments-social');
							var found_width = $social_comments_found.width();
							$social_comments_found.css({
								position: 'relative',
								visibility: 'visible',
								width: 0
							}).animate({ width: found_width + 'px' });

							// set params for next call
							$social_aggregation.attr('href', response.link);

							$comment_adminbar_item.removeClass('running-aggregation');
						},
						'json'
					);
				}
			});
		}

		/**
		 * Twitter @Anywhere
		 */
		if (typeof twttr != 'undefined') {
			twttr.anywhere(function(T) {
				T.hovercards();
			});
		}

		/**
		 * Social items
		 */
		if ($('.social-items-and-more').length) {
			$('.social-items-and-more').click(function(e) {
				e.preventDefault();

				$(this).parent().find('a').show();
				$(this).hide();
			});
		}
	});
})(jQuery);

