AUI.add(

	'com-placecube-cookieconsent',

	function(A) {

		var PPID = 'com_placecube_cookieconsent_web_portlet_CookieConsentPortlet';

		var CookieConsent = {

			initCookieConsentForm: function() {

				$(document).on('click', '.btn-cookie-consent', function(e) {
					event.preventDefault();

					var consentResponse = $(e.target).attr('data-cookie-consent');

					var selected = $('input[type="radio"][name="measure-website-use"]:checked');
					if (selected.length > 0) {
						consentResponse = selected.val();
					}
					A.CookieConsent.updateConsent(consentResponse);

				});
			},
			
			configureDoNotTrack: function(cookiesAccepted){
				var doNotTrack = cookiesAccepted == 'false';
				window['ac_client_disable_tracking'] = doNotTrack;
			},

			updateConsent: function(consentResponse) {

				var url = Liferay.PortletURL.createResourceURL();
				url.setPortletId(PPID);
				url.setResourceId("/cookie-consent/update-consent");
				url.setParameter("consentGiven", consentResponse);

				A.io.request(url.toString(), {

					on: {

						success: function() {
							A.CookieConsent.configureDoNotTrack(consentResponse);
							if($(".cookie-consent-updated-banner").length > 0){
								$(".cookie-consent-updated-banner").show();
								$(window).scrollTop(0);
							} else {
								location.reload();
							}
						}

					}

				});

			},

			initCookieHideAction: function(namespace){
				$('#' + namespace + 'cookie-consent-close').on('click', function() {
					$('.cookie-consent__modal-mode').addClass('hide');
					sessionStorage.setItem("isCookieModalClosed", true);
				})

				let isCookieModalClosed = (sessionStorage.getItem("isCookieModalClosed") === 'true');

				if (!isCookieModalClosed) {
					$('.cookie-consent__modal-mode').removeClass('hide');
				}
			}

		};

		A.CookieConsent = CookieConsent;
	},
	'',
	{
		requires: ['aui-io', 'liferay-portlet-url']
	}
);

var namespace;

function loadScript(GOOGLE_API_KEY, portletNamespace) {
	namespace = portletNamespace;
	if (!(window.google && window.google.maps)) {
		var script = document.createElement('script');
		script.type = 'text/javascript';
		script.src = 'https://maps.googleapis.com/maps/api/js?key=' + GOOGLE_API_KEY + '&callback=initAutocomplete&libraries=places&v=weekly'; //& needed
		document.body.appendChild(script);
	} else {
		initAutocomplete();
	}

}

function initAutocomplete() {
	var autocomplete = new google.maps.places.Autocomplete(document.querySelector('#' + namespace + 'autocomplete'), {
		componentRestrictions: { country: ['uk'] },
		fields: ['formatted_address', 'geometry', 'name'],
		types: ['geocode'],
	});
	autocomplete.addListener("place_changed", () => {
		var place = autocomplete.getPlace();
		if (!place.geometry || !place.geometry.location) {
			return;
		}
		if (place.geometry.location) {
			document.getElementById(namespace + "latitude").value = place.geometry.location.lat();
			document.getElementById(namespace + "longitude").value = place.geometry.location.lng();
			document.getElementById(namespace + "formattedAddress").value = place.formatted_address;
			document.getElementById(namespace + "location-search-form").submit();
		}

	});
}

function clearCurrentLocation() {
	document.getElementById(namespace + "formattedAddress").value = '';
	document.getElementById(namespace + "location-search-form").submit();
}

function getCurrentLocation() {
	if (navigator.geolocation) {
		navigator.geolocation.getCurrentPosition(showPosition);
	} else {
		window.alert("Geolocation is not supported by this browser.");
	}
}

function showPosition(position) {
	document.getElementById(namespace + "latitude").value = position.coords.latitude;
	document.getElementById(namespace + "longitude").value = position.coords.longitude;
	document.getElementById(namespace + "formattedAddress").value = "Current location";
	document.getElementById(namespace + "location-search-form").submit();
}
AUI().ready('aui-base','autocomplete-list','datasource-io','liferay-portlet-url',function(A){
	
	A.on('resize',function(event){
		resetSearchSuggestionAutoComplete();
	});
	
	Liferay.after('endNavigate',function(){
		resetSearchSuggestionAutoComplete();
	});
	
	A.all(".search-bar-keywords-input, input[name='keywords'], .keywords-input").each(function(node, index, list){
		
		node.on('focus',function(){
			
			var inputNode = "#" + this.get('id');
				
			if(typeof(Liferay.component(inputNode)) === "undefined"){
			
				
				var TPL_BLOCK_SUGGESTION_ROW = '<div class="nameplate">' +
												'<div class="nameplate-content">' +
													'{term}' +
												'</div>' +
											'</div>';	
				var dataSource = new A.DataSource.IO(
						{
						source: getResourceUrlAsString()
						}
					);
				
				var autocomplete = new A.AutoCompleteList({
					activateFirstItem: false,
					inputNode: inputNode,
					maxResults: 10,
					minQueryLength: 1,
					on: {
						select: function(event) {
							var result = event.result.raw;
							A.one(inputNode).val(result.term.replace(/(<([^>]+)>)/gi, ""));
							var formName = A.one(inputNode).ancestor("form").get('name');
							document.forms[formName].submit();
						}
					},		
					render: 'true',
					source: dataSource,
					requestTemplate: '&_com_placecube_digitalplace_local_search_suggestion_web_portlet_SearchSuggestionPortlet_keywords={query}',
					resultFormatter: function(query, results){
			
						var resultListEntries = A.Array.map(results, function(result){
			
							var resultListEntryMarkUp  = A.Lang.sub(
											TPL_BLOCK_SUGGESTION_ROW,
											{
												term: result.raw.term
											}
										);
			
			
							return resultListEntryMarkUp;
						});
			
						return resultListEntries;
					},
					resultListLocator: function (response) {
						return A.JSON.parse(response[0].responseText);
					},
					resultTextLocator: function (result) {
						return '';
					}		
				});
				
				Liferay.component(inputNode, autocomplete);

			}
		});
		
		
	});
	
	function getResourceUrlAsString(){
		var resourceURL = Liferay.PortletURL.createResourceURL();
		resourceURL.setParameter("p_p_id", 'com_placecube_digitalplace_local_search_suggestion_web_portlet_SearchSuggestionPortlet');
		
		return resourceURL.toString();
	}

	function resetSearchSuggestionAutoComplete(){
		
		A.all(".search-bar-keywords-input, input[name='keywords'], .keywords-input").each(function(node, index, list){
			
			var inputNode = "#" + this.get('id');
			var component = Liferay.component(inputNode);
			
			if(typeof(component) != "undefined"){
				component.destroy(true);
				Liferay.destroyComponent(inputNode);
			}
			
		});
	}
});

;(function () {

	Liferay.provide(window, 'updateCategoryFilterSelection', function (namespace, element, baseRemoveFilterUrl, baseUpdateFilterSelectionUrl, redirectUrl) {
		var A = AUI();
		
		var id = A.one(element).get('id');
		var oldField = A.one("#" + id + "_old");
		
		var optionSelectedValue = A.one(element).val();
		
		var selectedElement = A.one(element).one("option[value=" + optionSelectedValue + "]");
		var value = selectedElement.get('value');
		var label = selectedElement.get('label');

		var updateFilterSelectionUrl = baseUpdateFilterSelectionUrl + "&" + namespace + "filterValue=" + value + "&" + namespace + "filterLabel=" + label;
   		var removeFilterUrl = baseRemoveFilterUrl + "&" + namespace + "filterValue=" + oldField.val();
   		
   		$.ajax({
				type: "POST",
				url: removeFilterUrl,
				success : function(data) {					
					$.ajax({
						type: "POST",
						url: updateFilterSelectionUrl,
						success : function(data) {
							oldField.val(optionSelectedValue);
							window.location.href = redirectUrl;
						},
						error: function(jqXHR, textStatus, errorThrown){
					   		console.info("Update filter selection call failed: " + textStatus);
						}
				  	});			
  				},
		  		error: function(jqXHR, textStatus, errorThrown){
					console.info("Clear all filters call failed: " + textStatus);
				}
		  
		});
	});
	
})()
