From 340f48fdebd1622de8a44c6fc655e47f61583ca2 Mon Sep 17 00:00:00 2001
From: Callum Macrae <callum@macr.ae>
Date: Wed, 13 Aug 2014 22:44:21 +0100
Subject: [PATCH] [ticket/12982] Refactoring: made most JS nice.

PHPBB3-12982
---
 phpBB/assets/javascript/core.js             | 464 +++++++++++---------
 phpBB/styles/prosilver/template/ajax.js     | 143 +++---
 phpBB/styles/prosilver/template/timezone.js |  15 +-
 3 files changed, 327 insertions(+), 295 deletions(-)

diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js
index 388f31698f..37975065e8 100644
--- a/phpBB/assets/javascript/core.js
+++ b/phpBB/assets/javascript/core.js
@@ -3,7 +3,7 @@ phpbb.alertTime = 100;
 
 (function($) {  // Avoid conflicts with other libraries
 
-"use strict";
+'use strict';
 
 // define a couple constants for keydown functions.
 var keymap = {
@@ -12,8 +12,8 @@ var keymap = {
 	ESC: 27
 };
 
-var dark = $('#darkenwrapper');
-var loadingIndicator = $('#loading_indicator');
+var $dark = $('#darkenwrapper');
+var $loadingIndicator = $('#loading_indicator');
 var phpbbAlertTimer = null;
 
 phpbb.isTouch = (window && typeof window.ontouchstart !== 'undefined');
@@ -24,18 +24,20 @@ phpbb.isTouch = (window && typeof window.ontouchstart !== 'undefined');
  * @returns object Returns loadingIndicator.
  */
 phpbb.loadingIndicator = function() {
-	if (!loadingIndicator.is(':visible')) {
-		loadingIndicator.fadeIn(phpbb.alertTime);
+	if (!$loadingIndicator.is(':visible')) {
+		$loadingIndicator.fadeIn(phpbb.alertTime);
 		// Wait fifteen seconds and display an error if nothing has been returned by then.
 		phpbb.clearLoadingTimeout();
 		phpbbAlertTimer = setTimeout(function() {
-			if (loadingIndicator.is(':visible')) {
-				phpbb.alert($('#phpbb_alert').attr('data-l-err'), $('#phpbb_alert').attr('data-l-timeout-processing-req'));
+			var $alert = $('#phpbb_alert');
+
+			if ($loadingIndicator.is(':visible')) {
+				phpbb.alert($alert.attr('data-l-err'), $alert.attr('data-l-timeout-processing-req'));
 			}
 		}, 15000);
 	}
 
-	return loadingIndicator;
+	return $loadingIndicator;
 };
 
 /**
@@ -73,24 +75,24 @@ phpbb.closeDarkenWrapper = function(delay) {
  * @returns object Returns the div created.
  */
 phpbb.alert = function(title, msg, fadedark) {
-	var div = $('#phpbb_alert');
-	div.find('.alert_title').html(title);
-	div.find('.alert_text').html(msg);
+	var $alert = $('#phpbb_alert');
+	$alert.find('.alert_title').html(title);
+	$alert.find('.alert_text').html(msg);
 
-	if (!dark.is(':visible')) {
-		dark.fadeIn(phpbb.alertTime);
+	if (!$dark.is(':visible')) {
+		$dark.fadeIn(phpbb.alertTime);
 	}
 
-	div.bind('click', function(e) {
+	$alert.on('click', function(e) {
 		e.stopPropagation();
 	});
-	dark.one('click', function(e) {
+	$dark.one('click', function(e) {
 		var fade;
 
-		div.find('.alert_close').unbind('click');
-		fade = (typeof fadedark !== 'undefined' && !fadedark) ? div : dark;
+		$alert.find('.alert_close').off('click');
+		fade = (typeof fadedark !== 'undefined' && !fadedark) ? $alert : $dark;
 		fade.fadeOut(phpbb.alertTime, function() {
-			div.hide();
+			$alert.hide();
 		});
 
 		e.preventDefault();
@@ -98,35 +100,35 @@ phpbb.alert = function(title, msg, fadedark) {
 	});
 
 	$(document).keydown(function(e) {
-		if ((e.keyCode === keymap.ENTER || e.keyCode === keymap.ESC) && dark.is(':visible')) {
-			dark.trigger('click');
+		if ((e.keyCode === keymap.ENTER || e.keyCode === keymap.ESC) && $dark.is(':visible')) {
+			$dark.trigger('click');
 
 			e.preventDefault();
 			e.stopPropagation();
 		}
 	});
 
-	div.find('.alert_close').one('click', function(e) {
-		dark.trigger('click');
+	$alert.find('.alert_close').one('click', function(e) {
+		$dark.trigger('click');
 
 		e.preventDefault();
 	});
 
-	if (loadingIndicator.is(':visible')) {
-		loadingIndicator.fadeOut(phpbb.alertTime, function() {
-			dark.append(div);
-			div.fadeIn(phpbb.alertTime);
+	if ($loadingIndicator.is(':visible')) {
+		$loadingIndicator.fadeOut(phpbb.alertTime, function() {
+			$dark.append($alert);
+			$alert.fadeIn(phpbb.alertTime);
 		});
-	} else if (dark.is(':visible')) {
-		dark.append(div);
-		div.fadeIn(phpbb.alertTime);
+	} else if ($dark.is(':visible')) {
+		$dark.append($alert);
+		$alert.fadeIn(phpbb.alertTime);
 	} else {
-		dark.append(div);
-		div.show();
-		dark.fadeIn(phpbb.alertTime);
+		$dark.append($alert);
+		$alert.show();
+		$dark.fadeIn(phpbb.alertTime);
 	}
 
-	return div;
+	return $alert;
 };
 
 /**
@@ -143,24 +145,24 @@ phpbb.alert = function(title, msg, fadedark) {
  * @returns object Returns the div created.
  */
 phpbb.confirm = function(msg, callback, fadedark) {
-	var div = $('#phpbb_confirm');
-	div.find('.alert_text').html(msg);
+	var $confirmDiv = $('#phpbb_confirm');
+	$confirmDiv.find('.alert_text').html(msg);
 
-	if (!dark.is(':visible')) {
-		dark.fadeIn(phpbb.alertTime);
+	if (!$dark.is(':visible')) {
+		$dark.fadeIn(phpbb.alertTime);
 	}
 
-	div.bind('click', function(e) {
+	$confirmDiv.on('click', function(e) {
 		e.stopPropagation();
 	});
 
 	var clickHandler = function(e) {
 		var res = this.name === 'confirm';
-		var fade = (typeof fadedark !== 'undefined' && !fadedark && res) ? div : dark;
-		fade.fadeOut(phpbb.alertTime, function() {
-			div.hide();
+		var $fade = (typeof fadedark !== 'undefined' && !fadedark && res) ? $confirmDiv : $dark;
+		$fade.fadeOut(phpbb.alertTime, function() {
+			$confirmDiv.hide();
 		});
-		div.find('input[type="button"]').unbind('click', clickHandler);
+		$confirmDiv.find('input[type="button"]').off('click', clickHandler);
 		callback(res);
 
 		if (e) {
@@ -168,12 +170,12 @@ phpbb.confirm = function(msg, callback, fadedark) {
 			e.stopPropagation();
 		}
 	};
-	div.find('input[type="button"]').one('click', clickHandler);
+	$confirmDiv.find('input[type="button"]').one('click', clickHandler);
 
-	dark.one('click', function(e) {
-		div.find('.alert_close').unbind('click');
-		dark.fadeOut(phpbb.alertTime, function() {
-			div.hide();
+	$dark.one('click', function(e) {
+		$confirmDiv.find('.alert_close').unbind('click');
+		$dark.fadeOut(phpbb.alertTime, function() {
+			$confirmDiv.hide();
 		});
 		callback(false);
 
@@ -181,7 +183,7 @@ phpbb.confirm = function(msg, callback, fadedark) {
 		e.stopPropagation();
 	});
 
-	$(document).bind('keydown', function(e) {
+	$(document).on('keydown', function(e) {
 		if (e.keyCode === keymap.ENTER) {
 			$('input[name="confirm"]').trigger('click');
 			e.preventDefault();
@@ -193,31 +195,31 @@ phpbb.confirm = function(msg, callback, fadedark) {
 		}
 	});
 
-	div.find('.alert_close').one('click', function(e) {
-		var fade = (typeof fadedark !== 'undefined' && fadedark) ? div : dark;
-		fade.fadeOut(phpbb.alertTime, function() {
-			div.hide();
+	$confirmDiv.find('.alert_close').one('click', function(e) {
+		var $fade = (typeof fadedark !== 'undefined' && fadedark) ? $confirmDiv : $dark;
+		$fade.fadeOut(phpbb.alertTime, function() {
+			$confirmDiv.hide();
 		});
 		callback(false);
 
 		e.preventDefault();
 	});
 
-	if (loadingIndicator.is(':visible')) {
-		loadingIndicator.fadeOut(phpbb.alertTime, function() {
-			dark.append(div);
-			div.fadeIn(phpbb.alertTime);
+	if ($loadingIndicator.is(':visible')) {
+		$loadingIndicator.fadeOut(phpbb.alertTime, function() {
+			$dark.append($confirmDiv);
+			$confirmDiv.fadeIn(phpbb.alertTime);
 		});
-	} else if (dark.is(':visible')) {
-		dark.append(div);
-		div.fadeIn(phpbb.alertTime);
+	} else if ($dark.is(':visible')) {
+		$dark.append($confirmDiv);
+		$confirmDiv.fadeIn(phpbb.alertTime);
 	} else {
-		dark.append(div);
-		div.show();
-		dark.fadeIn(phpbb.alertTime);
+		$dark.append($confirmDiv);
+		$confirmDiv.show();
+		$dark.fadeIn(phpbb.alertTime);
 	}
 
-	return div;
+	return $confirmDiv;
 };
 
 /**
@@ -257,12 +259,12 @@ phpbb.parseQuerystring = function(string) {
  *     that was returned and (if it is a form) the form action.
  */
 phpbb.ajaxify = function(options) {
-	var elements = $(options.selector),
+	var $elements = $(options.selector),
 		refresh = options.refresh,
 		callback = options.callback,
 		overlay = (typeof options.overlay !== 'undefined') ? options.overlay : true,
-		isForm = elements.is('form'),
-		isText = elements.is('input[type="text"], textarea'),
+		isForm = $elements.is('form'),
+		isText = $elements.is('input[type="text"], textarea'),
 		eventName;
 
 	if (isForm) {
@@ -273,7 +275,7 @@ phpbb.ajaxify = function(options) {
 		eventName = 'click';
 	}
 
-	elements.bind(eventName, function(event) {
+	$elements.on(eventName, function(event) {
 		var action, method, data, submit, that = this, $this = $(this);
 
 		if ($this.find('input[type="submit"][data-clicked]').attr('data-ajax') === 'false') {
@@ -293,11 +295,12 @@ phpbb.ajaxify = function(options) {
 				errorText = errorThrown;
 			}
 			else {
-				errorText = dark.attr('data-ajax-error-text-' + textStatus);
-				if (typeof errorText !== 'string' || !errorText.length) 
-					errorText = dark.attr('data-ajax-error-text');
+				errorText = $dark.attr('data-ajax-error-text-' + textStatus);
+				if (typeof errorText !== 'string' || !errorText.length) {
+					errorText = $dark.attr('data-ajax-error-text');
+				}
 			}
-			phpbb.alert(dark.attr('data-ajax-error-title'), errorText);
+			phpbb.alert($dark.attr('data-ajax-error-title'), errorText);
 		}
 
 		/**
@@ -322,7 +325,7 @@ phpbb.ajaxify = function(options) {
 				if (typeof res.MESSAGE_TITLE !== 'undefined') {
 					alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT);
 				} else {
-					dark.fadeOut(phpbb.alertTime);
+					$dark.fadeOut(phpbb.alertTime);
 				}
 
 				if (typeof phpbb.ajaxCallbacks[callback] === 'function') {
@@ -345,7 +348,7 @@ phpbb.ajaxify = function(options) {
 
 						// Hide the alert even if we refresh the page, in case the user
 						// presses the back button.
-						dark.fadeOut(phpbb.alertTime, function() {
+						$dark.fadeOut(phpbb.alertTime, function() {
 							if (typeof alert !== 'undefined') {
 								alert.hide();
 							}
@@ -355,17 +358,19 @@ phpbb.ajaxify = function(options) {
 			} else {
 				// If confirmation is required, display a dialog to the user.
 				phpbb.confirm(res.MESSAGE_BODY, function(del) {
-					if (del) {
-						phpbb.loadingIndicator();
-						data =  $('<form>' + res.S_HIDDEN_FIELDS + '</form>').serialize();
-						$.ajax({
-							url: res.S_CONFIRM_ACTION,
-							type: 'POST',
-							data: data + '&confirm=' + res.YES_VALUE + '&' + $('#phpbb_confirm form').serialize(),
-							success: returnHandler,
-							error: errorHandler
-						});
+					if (!del) {
+						return;
 					}
+
+					phpbb.loadingIndicator();
+					data =  $('<form>' + res.S_HIDDEN_FIELDS + '</form>').serialize();
+					$.ajax({
+						url: res.S_CONFIRM_ACTION,
+						type: 'POST',
+						data: data + '&confirm=' + res.YES_VALUE + '&' + $('form', '#phpbb_confirm').serialize(),
+						success: returnHandler,
+						error: errorHandler
+					});
 				}, false);
 			}
 		}
@@ -373,7 +378,7 @@ phpbb.ajaxify = function(options) {
 		// If the element is a form, POST must be used and some extra data must
 		// be taken from the form.
 		var runFilter = (typeof options.filter === 'function');
-		var data = {};
+		data = {};
 
 		if (isForm) {
 			action = $this.attr('action').replace('&amp;', '&');
@@ -388,7 +393,7 @@ phpbb.ajaxify = function(options) {
 				});
 			}
 		} else if (isText) {
-			var name = ($this.attr('data-name') !== undefined) ? $this.attr('data-name') : this['name'];
+			var name = $this.attr('data-name') || this.name;
 			action = $this.attr('data-url').replace('&amp;', '&');
 			data[name] = this.value;
 			method = 'POST';
@@ -399,7 +404,8 @@ phpbb.ajaxify = function(options) {
 		}
 
 		var sendRequest = function() {
-			if (overlay && (typeof $this.attr('data-overlay') === 'undefined' || $this.attr('data-overlay') === 'true')) {
+			var dataOverlay = $this.attr('data-overlay');
+			if (overlay && (typeof dataOverlay === 'undefined' || dataOverlay === 'true')) {
 				phpbb.loadingIndicator();
 			}
 
@@ -411,7 +417,7 @@ phpbb.ajaxify = function(options) {
 				error: errorHandler
 			});
 			request.always(function() {
-				loadingIndicator.fadeOut(phpbb.alertTime);
+				$loadingIndicator.fadeOut(phpbb.alertTime);
 			});
 		};
 
@@ -426,7 +432,7 @@ phpbb.ajaxify = function(options) {
 	});
 
 	if (isForm) {
-		elements.find('input:submit').click(function () {
+		$elements.find('input:submit').click(function () {
 			var $this = $(this);
 
 			$this.siblings('[data-clicked]').removeAttr('data-clicked');
@@ -437,7 +443,13 @@ phpbb.ajaxify = function(options) {
 	return this;
 };
 
-phpbb.search = {cache: {data: []}, tpl: [], container: []};
+phpbb.search = {
+	cache: {
+		data: []
+	},
+	tpl: [],
+	container: []
+};
 
 /**
  * Get cached search data. 
@@ -478,7 +490,7 @@ phpbb.search.cache.set = function(id, key, value) {
  * @return undefined
  */
 phpbb.search.cache.setResults = function(id, keyword, value) {
-	this.data[id]['results'][keyword] = value;
+	this.data[id].results[keyword] = value;
 };
 
 /**
@@ -504,7 +516,7 @@ phpbb.search.cleanKeyword = function(keyword) {
 phpbb.search.getKeyword = function(el, keyword, multiline) {
 	if (multiline) {
 		var line = phpbb.search.getKeywordLine(el);
-		keyword = keyword.split("\n").splice(line, 1);
+		keyword = keyword.split('\n').splice(line, 1);
 	}
 	return phpbb.search.cleanKeyword(keyword);
 };
@@ -517,7 +529,7 @@ phpbb.search.getKeyword = function(el, keyword, multiline) {
  * @return int
  */
 phpbb.search.getKeywordLine = function (el) {
-	return el.val().substr(0, el.get(0).selectionStart).split("\n").length - 1;
+	return el.val().substr(0, el.get(0).selectionStart).split('\n').length - 1;
 };
 
 /**
@@ -533,9 +545,9 @@ phpbb.search.getKeywordLine = function (el) {
 phpbb.search.setValue = function(el, value, multiline) {
 	if (multiline) {
 		var line = phpbb.search.getKeywordLine(el),
-			lines = el.val().split("\n");
+			lines = el.val().split('\n');
 		lines[line] = value;
-		value = lines.join("\n");
+		value = lines.join('\n');
 	}
 	el.val(value);
 };
@@ -578,29 +590,29 @@ phpbb.search.filter = function(data, event, sendRequest) {
 		proceed = true;
 	data[dataName] = keyword;
 
-	if (cache['timeout']) {
-		clearTimeout(cache['timeout']);
+	if (cache.timeout) {
+		clearTimeout(cache.timeout);
 	}
 
 	var timeout = setTimeout(function() {
 		// Check min length and existence of cache.
 		if (minLength > keyword.length) {
 			proceed = false;
-		} else if (cache['last_search']) {
+		} else if (cache.last_search) {
 			// Has the keyword actually changed?
-			if (cache['last_search'] === keyword) {
+			if (cache.last_search === keyword) {
 				proceed = false;
 			} else {
 				// Do we already have results for this?
-				if (cache['results'][keyword]) {
-					var response = {keyword: keyword, results: cache['results'][keyword]};
+				if (cache.results[keyword]) {
+					var response = {keyword: keyword, results: cache.results[keyword]};
 					phpbb.search.handleResponse(response, el, true);
 					proceed = false;
 				}
 
 				// If the previous search didn't yield results and the string only had characters added to it,
 				// then we won't bother sending a request.
-				if (keyword.indexOf(cache['last_search']) === 0 && cache['results'][cache['last_search']].length === 0) {
+				if (keyword.indexOf(cache.last_search) === 0 && cache.results[cache.last_search].length === 0) {
 					phpbb.search.cache.set(searchID, 'last_search', keyword);
 					phpbb.search.cache.setResults(searchID, keyword, []);
 					proceed = false;
@@ -635,8 +647,8 @@ phpbb.search.handleResponse = function(res, el, fromCache, callback) {
 	var searchID = el.attr('data-results'),
 		container = $(searchID);
 
-	if (this.cache.get(searchID)['callback']) {
-		callback = this.cache.get(searchID)['callback'];
+	if (this.cache.get(searchID).callback) {
+		callback = this.cache.get(searchID).callback;
 	} else if (typeof callback === 'function') {
 		this.cache.set(searchID, 'callback', callback);
 	}
@@ -718,10 +730,8 @@ phpbb.history = {};
 * @return bool Returns true if the method is supported.
 */
 phpbb.history.isSupported = function(fn) {
-	if (typeof history === 'undefined' || typeof history[fn] === 'undefined') {
-		return false;
-	}
-	return true;
+	return !(typeof history === 'undefined' || typeof history[fn] === 'undefined');
+	
 };
 
 /**
@@ -783,36 +793,43 @@ phpbb.history.pushUrl = function(url, title, obj) {
 * @param	bool	keepSelection		Shall we keep the value selected, or shall the user be forced to repick one.
 */
 phpbb.timezoneSwitchDate = function(keepSelection) {
-	if ($('#timezone_copy').length === 0) {
+	var $timezoneCopy = $('#timezone_copy');
+	var $timezone = $('#timezone');
+	var $tzDate = $('#tz_date');
+	var $tzSelectDateSuggest = $('#tz_select_date_suggest');
+
+	if ($timezoneCopy.length === 0) {
 		// We make a backup of the original dropdown, so we can remove optgroups
 		// instead of setting display to none, because IE and chrome will not
 		// hide options inside of optgroups and selects via css
-		$('#timezone').clone().attr('id', 'timezone_copy').css('display', 'none').attr('name', 'tz_copy').insertAfter('#timezone');
+		$timezone.clone().attr('id', 'timezone_copy').css('display', 'none').attr('name', 'tz_copy').insertAfter('#timezone');
 	} else {
 		// Copy the content of our backup, so we can remove all unneeded options
-		$('#timezone').replaceWith($('#timezone_copy').clone().attr('id', 'timezone').css('display', 'block').attr('name', 'tz'));
+		$timezone.replaceWith($timezoneCopy.clone().attr('id', 'timezone').css('display', 'block').attr('name', 'tz'));
 	}
 
-	if ($('#tz_date').val() !== '') {
-		$('#timezone > optgroup').remove(":not([label='" + $('#tz_date').val() + "'])");
+	if ($tzDate.val() !== '') {
+		$timezone.children('optgroup').remove(':not([label="' + $('#tz_date').val() + '"])');
 	}
 
-	if ($('#tz_date').val() === $('#tz_select_date_suggest').attr('data-suggested-tz')) {
-		$('#tz_select_date_suggest').css('display', 'none');
+	if ($tzDate.val() === $tzSelectDateSuggest.attr('data-suggested-tz')) {
+		$tzSelectDateSuggest.css('display', 'none');
 	} else {
-		$('#tz_select_date_suggest').css('display', 'inline');
+		$tzSelectDateSuggest.css('display', 'inline');
 	}
+	
+	var $tzOptions = $timezone.children('optgroup[label="' + $tzDate.val() + '"]').children('option')
 
-	if ($("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option").size() === 1) {
+	if ($tzOptions.length === 1) {
 		// If there is only one timezone for the selected date, we just select that automatically.
-		$("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option:first").prop('selected', true);
+		$tzOptions.prop('selected', true);
 		keepSelection = true;
 	}
 
 	if (typeof keepSelection !== 'undefined' && !keepSelection) {
-		var timezoneOptions = $('#timezone > optgroup option');
-		if (timezoneOptions.filter(':selected').length <= 0) {
-			timezoneOptions.filter(':first').prop('selected', true);
+		var $timezoneOptions = $timezone.find('optgroup option');
+		if ($timezoneOptions.filter(':selected').length <= 0) {
+			$timezoneOptions.filter(':first').prop('selected', true);
 		}
 	}
 };
@@ -832,7 +849,6 @@ phpbb.timezoneEnableDateSelection = function() {
 phpbb.timezonePreselectSelect = function(forceSelector) {
 
 	// The offset returned here is in minutes and negated.
-	// http://www.w3schools.com/jsref/jsref_getTimezoneOffset.asp
 	var offset = (new Date()).getTimezoneOffset();
 	var sign = '-';
 
@@ -858,9 +874,11 @@ phpbb.timezonePreselectSelect = function(forceSelector) {
 
 	var prefix = 'GMT' + sign + hours + ':' + minutes;
 	var prefixLength = prefix.length;
-	var selectorOptions = $('#tz_date > option');
+	var selectorOptions = $('option', '#tz_date');
 	var i;
 
+	var $tzSelectDateSuggest = $('#tz_select_date_suggest');
+
 	for (i = 0; i < selectorOptions.length; ++i) {
 		var option = selectorOptions[i];
 
@@ -869,16 +887,18 @@ phpbb.timezonePreselectSelect = function(forceSelector) {
 				// We do not select the option for the user, but notify him,
 				// that we would suggest a different setting.
 				phpbb.timezoneSwitchDate(true);
-				$('#tz_select_date_suggest').css('display', 'inline');
+				$tzSelectDateSuggest.css('display', 'inline');
 			} else {
 				option.selected = true;
 				phpbb.timezoneSwitchDate(!forceSelector);
-				$('#tz_select_date_suggest').css('display', 'none');
+				$tzSelectDateSuggest.css('display', 'none');
 			}
 
-			$('#tz_select_date_suggest').attr('title', $('#tz_select_date_suggest').attr('data-l-suggestion').replace("%s", option.innerHTML));
-			$('#tz_select_date_suggest').attr('value', $('#tz_select_date_suggest').attr('data-l-suggestion').replace("%s", option.innerHTML.substring(0, 9)));
-			$('#tz_select_date_suggest').attr('data-suggested-tz', option.innerHTML);
+			var suggestion = $tzSelectDateSuggest.attr('data-l-suggestion');
+
+			$tzSelectDateSuggest.attr('title', suggestion.replace('%s', option.innerHTML));
+			$tzSelectDateSuggest.attr('value', suggestion.replace('%s', option.innerHTML.substring(0, 9)));
+			$tzSelectDateSuggest.attr('data-suggested-tz', option.innerHTML);
 
 			// Found the suggestion, there cannot be more, so return from here.
 			return;
@@ -916,22 +936,22 @@ phpbb.addAjaxCallback('member_search', function(res) {
  * current text so that the process can be repeated.
  */
 phpbb.addAjaxCallback('alt_text', function() {
-	var el,
+	var $el,
 		updateAll = $(this).data('update-all'),
 		altText;
 
 	if (updateAll !== undefined && updateAll.length) {
-		el = $(updateAll);
+		$el = $(updateAll);
 	} else {
-		el = $(this);
+		$el = $(this);
 	}
 
-	el.each(function() {
-		var el = $(this);
-		altText = el.attr('data-alt-text');
-		el.attr('data-alt-text', el.text());
-		el.attr('title', $.trim(altText));
-		el.text(altText);
+	$el.each(function() {
+		var $this = $(this);
+		altText = $this.attr('data-alt-text');
+		$this.attr('data-alt-text', $this.text());
+		$this.attr('title', $.trim(altText));
+		$this.text(altText);
 	});
 });
 
@@ -945,36 +965,36 @@ phpbb.addAjaxCallback('alt_text', function() {
  * and changes the link itself.
  */
 phpbb.addAjaxCallback('toggle_link', function() {
-	var el,
+	var $el,
 		updateAll = $(this).data('update-all') ,
 		toggleText,
 		toggleUrl,
 		toggleClass;
 
 	if (updateAll !== undefined && updateAll.length) {
-		el = $(updateAll);
+		$el = $(updateAll);
 	} else {
-		el = $(this);
+		$el = $(this);
 	}
 
-	el.each(function() {
-		var el = $(this);
+	$el.each(function() {
+		var $this = $(this);
 
 		// Toggle link text
-		toggleText = el.attr('data-toggle-text');
-		el.attr('data-toggle-text', el.text());
-		el.attr('title', $.trim(toggleText));
-		el.text(toggleText);
+		toggleText = $this.attr('data-toggle-text');
+		$this.attr('data-toggle-text', $this.text());
+		$this.attr('title', $.trim(toggleText));
+		$this.text(toggleText);
 
 		// Toggle link url
-		toggleUrl = el.attr('data-toggle-url');
-		el.attr('data-toggle-url', el.attr('href'));
-		el.attr('href', toggleUrl);
+		toggleUrl = $this.attr('data-toggle-url');
+		$this.attr('data-toggle-url', $this.attr('href'));
+		$this.attr('href', toggleUrl);
 
 		// Toggle class of link parent
-		toggleClass = el.attr('data-toggle-class');
-		el.attr('data-toggle-class', el.parent().attr('class'));
-		el.parent().attr('class', toggleClass);
+		toggleClass = $this.attr('data-toggle-class');
+		$this.attr('data-toggle-class', $this.parent().attr('class'));
+		$this.parent().attr('class', toggleClass);
 	});
 });
 
@@ -984,7 +1004,7 @@ phpbb.addAjaxCallback('toggle_link', function() {
 * This function automatically resizes textarea elements when user
 * types text.
 *
-* @param {jQuery} items jQuery object(s) to resize
+* @param {jQuery} $items jQuery object(s) to resize
 * @param {object} options Optional parameter that adjusts default
 * 	configuration. See configuration variable
 *
@@ -1000,25 +1020,26 @@ phpbb.addAjaxCallback('toggle_link', function() {
 *			this points to DOM object
 *			item is a jQuery object, same as this
 */
-phpbb.resizeTextArea = function(items, options) {
+phpbb.resizeTextArea = function($items, options) {
 	// Configuration
 	var configuration = {
 		minWindowHeight: 500,
 		minHeight: 200,
 		maxHeight: 500,
 		heightDiff: 200,
-		resizeCallback: function(item) { },
-		resetCallback: function(item) { }
+		resizeCallback: function() {},
+		resetCallback: function() {}
 	};
 
-	if (phpbb.isTouch) return;
+	if (phpbb.isTouch) {
+		return;
+	}
 
 	if (arguments.length > 1) {
 		configuration = $.extend(configuration, options);
 	}
 
-	function resetAutoResize(item) 
-	{
+	function resetAutoResize(item) {
 		var $item = $(item);
 		if ($item.hasClass('auto-resized')) {
 			$(item).css({height: '', resize: ''}).removeClass('auto-resized');
@@ -1026,10 +1047,8 @@ phpbb.resizeTextArea = function(items, options) {
 		}
 	}
 
-	function autoResize(item) 
-	{
-		function setHeight(height)
-		{
+	function autoResize(item) {
+		function setHeight(height) {
 			height += parseInt($item.css('height')) - $item.height();
 			$item.css({height: height + 'px', resize: 'none'}).addClass('auto-resized');
 			configuration.resizeCallback.call(item, $item);
@@ -1059,14 +1078,14 @@ phpbb.resizeTextArea = function(items, options) {
 		}
 	}
 
-	items.bind('focus change keyup', function() {
+	$items.on('focus change keyup', function() {
 		$(this).each(function() {
 			autoResize(this);
 		});
 	}).change();
 
 	$(window).resize(function() {
-		items.each(function() {
+		$items.each(function() {
 			if ($(this).hasClass('auto-resized')) {
 				autoResize(this);
 			}
@@ -1104,7 +1123,9 @@ phpbb.inBBCodeTag = function(textarea, startTags, endTags) {
 			lastStart = Math.max(lastStart, index);
 		}
 	}
-	if (lastStart == -1) return false;
+	if (lastStart == -1) {
+		return false;
+	}
 
 	if (start > 0) {
 		for (i = 0; i < endTags.length; i++) {
@@ -1114,7 +1135,7 @@ phpbb.inBBCodeTag = function(textarea, startTags, endTags) {
 	}
 
 	return (lastEnd < lastStart);
-}
+};
 
 
 /**
@@ -1158,7 +1179,7 @@ phpbb.applyCodeEditor = function(textarea) {
 	function getLastLine(stripCodeStart) {
 		var start = textarea.selectionStart,
 			value = textarea.value,
-			index = value.lastIndexOf("\n", start - 1);
+			index = value.lastIndexOf('\n', start - 1);
 
 		value = value.substring(index + 1, start);
 
@@ -1207,7 +1228,7 @@ phpbb.applyCodeEditor = function(textarea) {
 			!event.altKey		&&
 			!event.metaKey) {
 			if (inTag()) {
-				appendText("\t");
+				appendText('\t');
 				event.preventDefault();
 				return;
 			}
@@ -1220,9 +1241,8 @@ phpbb.applyCodeEditor = function(textarea) {
 					code = '' + /^\s*/g.exec(lastLine);
 
 				if (code.length > 0) {
-					appendText("\n" + code);
+					appendText('\n' + code);
 					event.preventDefault();
-					return;
 				}
 			}
 		}
@@ -1247,22 +1267,22 @@ phpbb.toggleDropdown = function() {
 	var $this = $(this),
 		options = $this.data('dropdown-options'),
 		parent = options.parent,
-		visible = parent.hasClass('dropdown-visible');
+		visible = parent.hasClass('dropdown-visible'),
+		direction;
 
 	if (!visible) {
 		// Hide other dropdown menus
 		$(phpbb.dropdownHandles).each(phpbb.toggleDropdown);
 
 		// Figure out direction of dropdown
-		var direction = options.direction,
-			verticalDirection = options.verticalDirection,
+		direction = options.direction;
+		var verticalDirection = options.verticalDirection,
 			offset = $this.offset();
 
 		if (direction == 'auto') {
 			if (($(window).width() - $this.outerWidth(true)) / 2 > offset.left) {
 				direction = 'right';
-			}
-			else {
+			} else {
 				direction = 'left';
 			}
 		}
@@ -1272,12 +1292,7 @@ phpbb.toggleDropdown = function() {
 			var height = $(window).height(),
 				top = offset.top - $(window).scrollTop();
 
-			if (top < height * 0.7) {
-				verticalDirection = 'down';
-			}
-			else {
-				verticalDirection = 'up';
-			}
+			verticalDirection = (top < height * 0.7) ? 'down' : 'up';
 		}
 		parent.toggleClass(options.upClass, verticalDirection == 'up').toggleClass(options.downClass, verticalDirection == 'down');
 	}
@@ -1304,8 +1319,7 @@ phpbb.toggleDropdown = function() {
 
 			if (offset < 2) {
 				$this.css('left', (2 - offset) + 'px');
-			}
-			else if ((offset + width + 2) > windowWidth) {
+			} else if ((offset + width + 2) > windowWidth) {
 				$this.css('margin-left', (windowWidth - offset - width - 2) + 'px');
 			}
 
@@ -1342,8 +1356,7 @@ phpbb.toggleDropdown = function() {
 			var e = arguments[0];
 			e.preventDefault();
 			e.stopPropagation();
-		}
-		catch (error) { }
+		} catch (error) { }
 	}
 	return false;
 };
@@ -1354,7 +1367,7 @@ phpbb.toggleDropdown = function() {
 phpbb.toggleSubmenu = function(e) {
 	$(this).siblings('.dropdown-submenu').toggle();
 	e.preventDefault();
-}
+};
 
 /**
 * Register dropdown menu
@@ -1364,8 +1377,7 @@ phpbb.toggleSubmenu = function(e) {
 * @param {jQuery} dropdown Dropdown menu.
 * @param {Object} options List of options. Optional.
 */
-phpbb.registerDropdown = function(toggle, dropdown, options)
-{
+phpbb.registerDropdown = function(toggle, dropdown, options) {
 	var ops = {
 			parent: toggle.parent(), // Parent item to add classes to
 			direction: 'auto', // Direction of dropdown menu. Possible values: auto, left, right
@@ -1411,8 +1423,8 @@ phpbb.colorPalette = function(dir, width, height) {
 	numberList[3] = 'BF';
 	numberList[4] = 'FF';
 
-	var table_class = (dir == 'h') ? 'horizontal-palette' : 'vertical-palette';
-	html += '<table class="not-responsive colour-palette ' + table_class + '" style="width: auto;">';
+	var tableClass = (dir == 'h') ? 'horizontal-palette' : 'vertical-palette';
+	html += '<table class="not-responsive colour-palette ' + tableClass + '" style="width: auto;">';
 
 	for (r = 0; r < 5; r++) {
 		if (dir == 'h') {
@@ -1442,7 +1454,7 @@ phpbb.colorPalette = function(dir, width, height) {
 	}
 	html += '</table>';
 	return html;
-}
+};
 
 /**
 * Register a color palette.
@@ -1492,12 +1504,14 @@ phpbb.toggleDisplay = function(id, action, type) {
 		type = 'block';
 	}
 
-	var display = $('#' + id).css('display');
+	var $el = $('#' + id);
+
+	var display = $el.css('display');
 	if (!action) {
 		action = (display === '' || display === type) ? -1 : 1;
 	}
-	$('#' + id).css('display', ((action === 1) ? type : 'none'));
-}
+	$el.css('display', ((action === 1) ? type : 'none'));
+};
 
 /**
 * Toggle additional settings based on the selected
@@ -1508,9 +1522,9 @@ phpbb.toggleDisplay = function(id, action, type) {
 */
 phpbb.toggleSelectSettings = function(el) {
 	el.children().each(function() {
-		var option = $(this),
-			setting = $(option.data('toggle-setting'));
-		setting.toggle(option.is(':selected'));
+		var $this = $(this),
+			$setting = $($this.data('toggle-setting'));
+		$setting.toggle($this.is(':selected'));
 	});
 };
 
@@ -1536,49 +1550,61 @@ phpbb.getFunctionByName = function (functionName) {
 * Register page dropdowns.
 */
 phpbb.registerPageDropdowns = function() {
-	$('body').find('.dropdown-container').each(function() {
+	var $body = $('body');
+
+	$body.find('.dropdown-container').each(function() {
 		var $this = $(this),
-			trigger = $this.find('.dropdown-trigger:first'),
-			contents = $this.find('.dropdown'),
+			$trigger = $this.find('.dropdown-trigger:first'),
+			$contents = $this.find('.dropdown'),
 			options = {
 				direction: 'auto',
 				verticalDirection: 'auto'
 			},
 			data;
 
-		if (!trigger.length) {
+		if (!$trigger.length) {
 			data = $this.attr('data-dropdown-trigger');
-			trigger = data ? $this.children(data) : $this.children('a:first');
+			$trigger = data ? $this.children(data) : $this.children('a:first');
 		}
 
-		if (!contents.length) {
+		if (!$contents.length) {
 			data = $this.attr('data-dropdown-contents');
-			contents = data ? $this.children(data) : $this.children('div:first');
+			$contents = data ? $this.children(data) : $this.children('div:first');
 		}
 
-		if (!trigger.length || !contents.length) return;
+		if (!$trigger.length || !$contents.length) {
+			return;
+		}
 
-		if ($this.hasClass('dropdown-up')) options.verticalDirection = 'up';
-		if ($this.hasClass('dropdown-down')) options.verticalDirection = 'down';
-		if ($this.hasClass('dropdown-left')) options.direction = 'left';
-		if ($this.hasClass('dropdown-right')) options.direction = 'right';
+		if ($this.hasClass('dropdown-up')) {
+			options.verticalDirection = 'up';
+		}
+		if ($this.hasClass('dropdown-down')) {
+			options.verticalDirection = 'down';
+		}
+		if ($this.hasClass('dropdown-left')) {
+			options.direction = 'left';
+		}
+		if ($this.hasClass('dropdown-right')) {
+			options.direction = 'right';
+		}
 
-		phpbb.registerDropdown(trigger, contents, options);
+		phpbb.registerDropdown($trigger, $contents, options);
 	});
 
 	// Hide active dropdowns when click event happens outside
-	$('body').click(function(e) {
-		var parents = $(e.target).parents();
-		if (!parents.is(phpbb.dropdownVisibleContainers)) {
+	$body.click(function(e) {
+		var $parents = $(e.target).parents();
+		if (!$parents.is(phpbb.dropdownVisibleContainers)) {
 			$(phpbb.dropdownHandles).each(phpbb.toggleDropdown);
 		}
 	});
-}
+};
 
 /**
 * Apply code editor to all textarea elements with data-bbcode attribute
 */
-$(document).ready(function() {
+$(function() {
 	$('textarea[data-bbcode]').each(function() {
 		phpbb.applyCodeEditor(this);
 	});
@@ -1595,12 +1621,12 @@ $(document).ready(function() {
 
 	// Hide settings that are not selected via select element.
 	$('select[data-togglable-settings]').each(function() {
-		var select = $(this);
+		var $this = $(this);
 
-		select.change(function() {
-			phpbb.toggleSelectSettings(select);
+		$this.change(function() {
+			phpbb.toggleSelectSettings($this);
 		});
-		phpbb.toggleSelectSettings(select);
+		phpbb.toggleSelectSettings($this);
 	});
 });
 
diff --git a/phpBB/styles/prosilver/template/ajax.js b/phpBB/styles/prosilver/template/ajax.js
index 649a384418..7bf1cfb7a9 100644
--- a/phpBB/styles/prosilver/template/ajax.js
+++ b/phpBB/styles/prosilver/template/ajax.js
@@ -1,6 +1,8 @@
+/* global phpbb */
+
 (function($) {  // Avoid conflicts with other libraries
 
-"use strict";
+'use strict';
 
 // This callback will mark all forum icons read
 phpbb.addAjaxCallback('mark_forums_read', function(res) {
@@ -40,10 +42,10 @@ phpbb.addAjaxCallback('mark_forums_read', function(res) {
 /** 
 * This callback will mark all topic icons read
 *
-* @param update_topic_links bool Wether "Mark topics read" links should be
+* @param update_topic_links bool Whether "Mark topics read" links should be
 *     updated. Defaults to true.
 */
-phpbb.addAjaxCallback('mark_topics_read', function(res, update_topic_links) {
+phpbb.addAjaxCallback('mark_topics_read', function(res, updateTopicLinks) {
 	var readTitle = res.NO_UNREAD_POSTS;
 	var unreadTitle = res.UNREAD_POSTS;
 	var iconsArray = {
@@ -53,12 +55,12 @@ phpbb.addAjaxCallback('mark_topics_read', function(res, update_topic_links) {
 		'topic_unread': 'topic_read'
 	};
 	var iconsState = ['', '_hot', '_hot_mine', '_locked', '_locked_mine', '_mine'];
-	var unreadClassSelectors = '';
+	var unreadClassSelectors;
 	var classMap = {};
 	var classNames = [];
 
-	if (typeof update_topic_links === 'undefined') {
-		update_topic_links = true;
+	if (typeof updateTopicLinks === 'undefined') {
+		updateTopicLinks = true;
 	}
 
 	$.each(iconsArray, function(unreadClass, readClass) {
@@ -88,7 +90,7 @@ phpbb.addAjaxCallback('mark_topics_read', function(res, update_topic_links) {
 	$('a').has('span.icon_topic_newest').remove();
 
 	// Update mark topics read links
-	if (update_topic_links) {
+	if (updateTopicLinks) {
 		$('[data-ajax="mark_topics_read"]').attr('href', res.U_MARK_TOPICS);
 	}
 
@@ -114,22 +116,22 @@ phpbb.addAjaxCallback('notification.mark_read', function(res) {
 /**
  * Mark notification popup rows as read.
  *
- * @param {jQuery} el jQuery object(s) to mark read.
+ * @param {jQuery} $el jQuery object(s) to mark read.
  * @param {int} unreadCount The new unread notifications count.
  */
-phpbb.markNotifications = function(el, unreadCount) {
+phpbb.markNotifications = function($el, unreadCount) {
 	// Remove the unread status.
-	el.removeClass('bg2');
-	el.find('a.mark_read').remove();
+	$el.removeClass('bg2');
+	$el.find('a.mark_read').remove();
 
 	// Update the notification link to the real URL.
-	el.each(function() {
+	$el.each(function() {
 		var link = $(this).find('a');
 		link.attr('href', link.attr('data-real-url'));
 	});
 
 	// Update the unread count.
-	$('#notification_list_button strong').html(unreadCount);
+	$('strong', '#notification_list_button').html(unreadCount);
 	// Remove the Mark all read link if there are no unread notifications.
 	if (!unreadCount) {
 		$('#mark_all_notifications').remove();
@@ -138,12 +140,12 @@ phpbb.markNotifications = function(el, unreadCount) {
 
 // This callback finds the post from the delete link, and removes it.
 phpbb.addAjaxCallback('post_delete', function() {
-	var el = $(this),
+	var $this = $(this),
 		postId;
 
-	if (el.attr('data-refresh') === undefined) {
-		postId = el[0].href.split('&p=')[1];
-		var post = el.parents('#p' + postId).css('pointer-events', 'none');
+	if ($this.attr('data-refresh') === undefined) {
+		postId = $this[0].href.split('&p=')[1];
+		var post = $this.parents('#p' + postId).css('pointer-events', 'none');
 		if (post.hasClass('bg1') || post.hasClass('bg2')) {
 			var posts1 = post.nextAll('.bg1');
 			post.nextAll('.bg2').removeClass('bg2').addClass('bg1');
@@ -194,18 +196,18 @@ phpbb.addAjaxCallback('vote_poll', function(res) {
 	if (typeof res.success !== 'undefined') {
 		var poll = $('.topic_poll');
 		var panel = poll.find('.panel');
-		var results_visible = poll.find('dl:first-child .resultbar').is(':visible');
-		var most_votes = 0;
+		var resultsVisible = poll.find('dl:first-child .resultbar').is(':visible');
+		var mostVotes = 0;
 
 		// Set min-height to prevent the page from jumping when the content changes
-		var update_panel_height = function (height) {
+		var updatePanelHeight = function (height) {
 			var height = (typeof height === 'undefined') ? panel.find('.inner').outerHeight() : height;
 			panel.css('min-height', height);
 		};
-		update_panel_height();
+		updatePanelHeight();
 
 		// Remove the View results link
-		if (!results_visible) {
+		if (!resultsVisible) {
 			poll.find('.poll_view_results').hide(500);
 		}
 
@@ -221,8 +223,8 @@ phpbb.addAjaxCallback('vote_poll', function(res) {
 		// Get the votes count of the highest poll option
 		poll.find('[data-poll-option-id]').each(function() {
 			var option = $(this);
-			var option_id = option.attr('data-poll-option-id');
-			most_votes = (res.vote_counts[option_id] >= most_votes) ? res.vote_counts[option_id] : most_votes;
+			var optionId = option.attr('data-poll-option-id');
+			mostVotes = (res.vote_counts[optionId] >= mostVotes) ? res.vote_counts[optionId] : mostVotes;
 		});
 
 		// Update the total votes count
@@ -230,28 +232,30 @@ phpbb.addAjaxCallback('vote_poll', function(res) {
 
 		// Update each option
 		poll.find('[data-poll-option-id]').each(function() {
-			var option = $(this);
-			var option_id = option.attr('data-poll-option-id');
-			var voted = (typeof res.user_votes[option_id] !== 'undefined') ? true : false;
-			var most_voted = (res.vote_counts[option_id] == most_votes) ? true : false;
-			var percent = (!res.total_votes) ? 0 : Math.round((res.vote_counts[option_id] / res.total_votes) * 100);
-			var percent_rel = (most_votes == 0) ? 0 : Math.round((res.vote_counts[option_id] / most_votes) * 100);
+			var $this = $(this);
+			var optionId = $this.attr('data-poll-option-id');
+			var voted = (typeof res.user_votes[optionId] !== 'undefined');
+			var mostVoted = (res.vote_counts[optionId] == mostVotes);
+			var percent = (!res.total_votes) ? 0 : Math.round((res.vote_counts[optionId] / res.total_votes) * 100);
+			var percentRel = (mostVotes === 0) ? 0 : Math.round((res.vote_counts[optionId] / mostVotes) * 100);
 
-			option.toggleClass('voted', voted);
-			option.toggleClass('most-votes', most_voted);
+			$this.toggleClass('voted', voted);
+			$this.toggleClass('most-votes', mostVoted);
 
 			// Update the bars
-			var bar = option.find('.resultbar div');
-			var bar_time_lapse = (res.can_vote) ? 500 : 1500;
-			var new_bar_class = (percent == 100) ? 'pollbar5' : 'pollbar' + (Math.floor(percent / 20) + 1);
+			var bar = $this.find('.resultbar div');
+			var barTimeLapse = (res.can_vote) ? 500 : 1500;
+			var newBarClass = (percent == 100) ? 'pollbar5' : 'pollbar' + (Math.floor(percent / 20) + 1);
 
 			setTimeout(function () {
-				bar.animate({width: percent_rel + '%'}, 500).removeClass('pollbar1 pollbar2 pollbar3 pollbar4 pollbar5').addClass(new_bar_class);
-				bar.html(res.vote_counts[option_id]);
+				bar.animate({width: percentRel + '%'}, 500)
+					.removeClass('pollbar1 pollbar2 pollbar3 pollbar4 pollbar5')
+					.addClass(newBarClass)
+					.html(res.vote_counts[optionId]);
 
-				var percent_txt = (!percent) ? res.NO_VOTES : percent + '%';
-				option.find('.poll_option_percent').html(percent_txt);
-			}, bar_time_lapse);
+				var percentText = percent ? percent + '%' : res.NO_VOTES;
+				$this.find('.poll_option_percent').html(percentText);
+			}, barTimeLapse);
 		});
 
 		if (!res.can_vote) {
@@ -259,30 +263,31 @@ phpbb.addAjaxCallback('vote_poll', function(res) {
 		}
 
 		// Display "Your vote has been cast." message. Disappears after 5 seconds.
-		var confirmation_delay = (res.can_vote) ? 300 : 900;
-		poll.find('.vote-submitted').delay(confirmation_delay).slideDown(200, function() {
-			if (results_visible) {
-				update_panel_height();
+		var confirmationDelay = (res.can_vote) ? 300 : 900;
+		poll.find('.vote-submitted').delay(confirmationDelay).slideDown(200, function() {
+			if (resultsVisible) {
+				updatePanelHeight();
 			}
 
 			$(this).delay(5000).fadeOut(500, function() {
-				resize_panel(300);
+				resizePanel(300);
 			});
 		});
 
 		// Remove the gap resulting from removing options
 		setTimeout(function() {
-			resize_panel(500);
+			resizePanel(500);
 		}, 1500);
 
-		var resize_panel = function (time) {
-			var panel_height = panel.height();
-			var inner_height = panel.find('.inner').outerHeight();
+		var resizePanel = function (time) {
+			var panelHeight = panel.height();
+			var innerHeight = panel.find('.inner').outerHeight();
 
-			if (panel_height != inner_height) {
-				panel.css({'min-height': '', 'height': panel_height}).animate({height: inner_height}, time, function () {
-					panel.css({'min-height': inner_height, 'height': ''});
-				});
+			if (panelHeight != innerHeight) {
+				panel.css({'min-height': '', 'height': panelHeight})
+					.animate({height: innerHeight}, time, function () {
+						panel.css({'min-height': innerHeight, 'height': ''});
+					});
 			}
 		};
 	}
@@ -295,20 +300,19 @@ $('.poll_view_results a').click(function(e) {
 	// Do not follow the link
 	e.preventDefault();
 
-	var poll = $(this).parents('.topic_poll');
+	var $poll = $(this).parents('.topic_poll');
 
-	poll.find('.resultbar, .poll_option_percent, .poll_total_votes').show(500);
-	poll.find('.poll_view_results').hide(500);
+	$poll.find('.resultbar, .poll_option_percent, .poll_total_votes').show(500);
+	$poll.find('.poll_view_results').hide(500);
 });
 
 $('[data-ajax]').each(function() {
-	var $this = $(this),
-		ajax = $this.attr('data-ajax'),
-		filter = $this.attr('data-filter'),
-		fn;
+	var $this = $(this);
+	var ajax = $this.attr('data-ajax');
+	var filter = $this.attr('data-filter');
 
 	if (ajax !== 'false') {
-		fn = (ajax !== 'true') ? ajax : null;
+		var fn = (ajax !== 'true') ? ajax : null;
 		filter = (filter !== undefined) ? phpbb.getFunctionByName(filter) : null;
 
 		phpbb.ajaxify({
@@ -339,10 +343,10 @@ $('.display_post').click(function(e) {
 	// Do not follow the link
 	e.preventDefault();
 
-	var post_id = $(this).attr('data-post-id');
-	$('#post_content' + post_id).show();
-	$('#profile' + post_id).show();
-	$('#post_hidden' + post_id).hide();
+	var postId = $(this).attr('data-post-id');
+	$('#post_content' + postId).show();
+	$('#profile' + postId).show();
+	$('#post_hidden' + postId).hide();
 });
 
 $('#delete_permanent').click(function () {
@@ -361,10 +365,13 @@ $('#delete_permanent').click(function () {
 * appropriately changed based on the status of the search panel.
 */
 $('#member_search').click(function () {
-	$('#memberlist_search').slideToggle('fast');
+	var $memberlistSearch = $('#memberlist_search');
+
+	$memberlistSearch.slideToggle('fast');
 	phpbb.ajaxCallbacks.alt_text.call(this);
+
 	// Focus on the username textbox if it's available and displayed
-	if ($('#memberlist_search').is(':visible')) {
+	if ($memberlistSearch.is(':visible')) {
 		$('#username').focus();
 	}
 	return false;
@@ -373,7 +380,7 @@ $('#member_search').click(function () {
 /**
 * Automatically resize textarea
 */
-$(document).ready(function() {
+$(function() {
 	phpbb.resizeTextArea($('textarea:not(#message-box textarea, .no-auto-resize)'), {minHeight: 75, maxHeight: 250});
 	phpbb.resizeTextArea($('#message-box textarea'));
 });
diff --git a/phpBB/styles/prosilver/template/timezone.js b/phpBB/styles/prosilver/template/timezone.js
index e0d3da9ff7..7302fdcf33 100644
--- a/phpBB/styles/prosilver/template/timezone.js
+++ b/phpBB/styles/prosilver/template/timezone.js
@@ -1,6 +1,8 @@
+/* global phpbb */
+
 (function($) { // Avoid conflicts with other libraries
 
-"use strict";
+'use strict';
 
 $('#tz_date').change(function() {
 	phpbb.timezoneSwitchDate(false);
@@ -10,12 +12,9 @@ $('#tz_select_date_suggest').click(function(){
 	phpbb.timezonePreselectSelect(true);
 });
 
-$(document).ready(
-	phpbb.timezoneEnableDateSelection
-);
-
-$(document).ready(
-	phpbb.timezonePreselectSelect($('#tz_select_date_suggest').attr('timezone-preselect') === 'true')
-);
+$(function () {
+	phpbb.timezoneEnableDateSelection();
+	phpbb.timezonePreselectSelect($('#tz_select_date_suggest').attr('timezone-preselect') === 'true');
+})
 
 })(jQuery); // Avoid conflicts with other libraries