/* Minification failed. Returning unminified contents.
(134,3,145,4): run-time error JS1314: Implicit property name must be identifier: BeginSubmit(updateTargetID) {
			var $updateTarget = $('#' + updateTargetID);
			var $form = $updateTarget.find('form');

			if (!$form.length) {
				$form = $updateTarget.closest('form');
			}

			var $submitBtn = $form.find('input[type=submit], button[type=submit]');

			$submitBtn.addClass(classes.btnLoading).attr('disabled', true);
		}
 */
Component = window.Component || {};

Component.Forms = (function() {
	var selectors = {
		showAfterSubmit: '[data-show-after-submit]',

		datepickers: '[data-datepicker]',
		checkboxListItem: '[data-checkbox-item]',

		ecardWrapper: '[data-ecard]',
		ecardOption: '[data-ecard-option]',
		ecardExpand: '[data-ecard-expand]',
		ecardPopup: '[data-ecard-popup]',
		ecardConfirm: '[data-ecard-confirm]',
		ecardCancel: '[data-ecard-cancel]',
		ecardInput: '[data-ecard-input]'
	};

	var attrs = {
		datepickerType: 'datepicker'
	};

	var classes = {
		ecardPreview: 'js-preview-enabled',
		btnLoading: 'js-loading'
	};

	var monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];

	var closeEcardPreview = function(previewItem) {
		previewItem = $(previewItem);
		previewLabel = previewItem.find(selectors.ecardExpand);

		previewItem.removeClass(classes.ecardPreview);
		previewLabel.focus();
	};

	return {
		Init: function() {
			$(selectors.datepickers).each(function(_, datepicker) {
				var pickerType = $(datepicker).data(attrs.datepickerType);

				var pickerConfig = {
					field: datepicker,
					format: 'D MMMM YYYY',
					toString: function(date, format) {
						return date.getDate() + ' ' + monthNames[date.getMonth()] + ' ' + date.getFullYear();
					},
					parse: function(dateString, format) {
						var parts = dateString.split(' ');
						var day = parseInt(parts[0], 10);
						var month = monthNames.indexOf(parts[1]);
						var year = parseInt(parts[2], 10);

						return new Date(year, month, day);
					}
				};

				if (pickerType === 'past') {
					pickerConfig.yearRange = 100;
					pickerConfig.maxDate = new Date();
				} else if (pickerType === 'future') {
					pickerConfig.minDate = new Date();
				}

				new Pikaday(pickerConfig);
			});

			this.Bindings();
		},
		Bindings: function() {
			var _this = this;

			$(selectors.checkboxListItem).off('change.Forms').on('change.Forms', function() {
				_this.UpdateCheckboxList($(this).attr('name'));
			});

			// Expand click
			$(selectors.ecardExpand).off('click.Forms').on('click.Forms', function(e) {
				e.preventDefault();

				var expand = $(this);
				var option = expand.closest(selectors.ecardOption);
				var acceptBtn = option.find(selectors.ecardConfirm);
				var cancelBtn = option.find(selectors.ecardCancel);

				option.addClass(classes.ecardPreview);

				// Add select on accept click
				acceptBtn.off('click.Forms').on('click.Forms', function() {
					// Find radio button and check it
					var radioButton = option.find(selectors.ecardInput);
					radioButton.prop('checked', true);

					// Close popup
					closeEcardPreview(option);
				});

				// Close on background click
				option.off('click.Forms').on('click.Forms', function(e) {
					var option = $(this);
					var popup = option.find(selectors.ecardPopup);

					if ($(e.target).is(popup.get(0))) {
						closeEcardPreview(option);
					}
				});

				// Close on escape
				$('html').off('keyup.Forms').on('keyup.Forms', function(e) {
					if (e.key && e.key.toLowerCase() === 'escape') {
						closeEcardPreview(option);
					}
				});

				// Add close on close click
				cancelBtn.off('click.Forms').on('click.Forms', function() {
					closeEcardPreview(option);
				});
			});
		},
		UpdateCheckboxList: function(controlName) {
			var allCheckedOptions = $('input[type=checkbox][name="' + controlName + '"]:checked').map(function(_, option) {
				return option.value.replace(/,/g, '\\,');
			}).get();

			var actualFormName = controlName.substring(0, controlName.indexOf('_Options'));
			var hiddenField = $('input[type=hidden][name="' + actualFormName + '.SelectedValues"]').get(0);

			if (typeof hiddenField !== 'undefined') {
				hiddenField.value = allCheckedOptions.join(',');
			}
		},
		BeginSubmit(updateTargetID) {
			var $updateTarget = $('#' + updateTargetID);
			var $form = $updateTarget.find('form');

			if (!$form.length) {
				$form = $updateTarget.closest('form');
			}

			var $submitBtn = $form.find('input[type=submit], button[type=submit]');

			$submitBtn.addClass(classes.btnLoading).attr('disabled', true);
		},
		HandleResponse: function(updateTargetID, data) {
			// Redirect if enabled
			if (data.redirectTo) {
				window.location.href = data.redirectTo;
				return;
			}

			var $updateTarget = $('#' + updateTargetID);
			var $formWrapper = $updateTarget.find('form').parent();
			var $submitBtn = $formWrapper.find('input[type=submit], button[type=submit]');

			$submitBtn.removeClass(classes.btnLoading).attr('disabled', false);

			if (data.indexOf('field-validation-error') < 0) {
				// Unwrap from Kentico's thanks text wrapper
				data = $(data).html();
	
				// Pull out any labels to show after form submit
				var showAfterSubmit = $.makeArray($updateTarget.find(selectors.showAfterSubmit).map(function(_, el) {
					return $(el).parentsUntil('form').last()[0].outerHTML;
				}));
	
				// Prepend to data reversed so the labels stay in order
				data = showAfterSubmit.reverse().reduce(function(finalData, currentValue) {
					return currentValue + finalData;
				}, data);
			}

			// Add text content after and remove form
			$formWrapper.empty();
			$formWrapper.append(data);
		}
	}
})();;
