PageSourceSearch

https://store.bfwpub.com/hs/_ui/responsive/common/js/acc.storefinder.js

js bfwpub.com collected 2026-09-24 20:12:23 UTC 8,150 bytes, 318 lines download raw bytes

1ACC.storefinder = {
2
3	_autoload: [
4		["init", $(".js-store-finder").length != 0],
5		["bindStoreChange", $(".js-store-finder").length != 0],
6		["bindSearch", $(".js-store-finder").length != 0],
7		"bindPagination"
8	],
9	
10	storeData:"",
11	storeId:"",
12	coords:{},
13	storeSearchData:{},
14
15	createListItemHtml: function (data,id){
16
17		var item="";
18		item+='<li class="list__entry">';
19		item+='<input type="radio" name="storeNamePost" value="'+data.displayName+'" id="store-filder-entry-'+id+'" class="js-store-finder-input" data-id="'+id+'">';
20		item+='<label for="store-filder-entry-'+id+'" class="js-select-store-label">';
21		item+='<span class="entry__info">';
22		item+='<span class="entry__name">'+data.displayName+'</span>';
23		item+='<span class="entry__address">'+data.line1+' '+data.line2+'</span>';
24		item+='<span class="entry__city">'+data.town+'</span>';
25		item+='</span>';
26		item+='<span class="entry__distance">';
27		item+='<span>'+data.formattedDistance+'</span>';
28		item+='</span>';
29		item+='</label>';
30		item+='</li>';
31		return item;
32	},
33
34	refreshNavigation: function (){
35		var listitems = "";
36		data = ACC.storefinder.storeData
37		
38		if(data){
39			for(i = 0;i < data["data"].length;i++){
40				listitems += ACC.storefinder.createListItemHtml(data["data"][i],i)
41			}
42	        var listitemsSanitize = DOMPurify.sanitize(listitems);
43			$(".js-store-finder-navigation-list").html(listitemsSanitize);
44	
45			// select the first store
46			var firstInput= $(".js-store-finder-input")[0];
47			$(firstInput).click();
48		}
49
50
51		var page = ACC.storefinder.storeSearchData.page;
52		$(".js-store-finder-pager-item-from").html(page*10+1);
53
54		var to = ((page*10+10)>ACC.storefinder.storeData.total)? ACC.storefinder.storeData.total : page*10+10 ;
55		var toSanitize = DOMPurify.sanitize(to);
56		$(".js-store-finder-pager-item-to").html(toSanitize);
57		$(".js-store-finder-pager-item-all").html(ACC.storefinder.storeData.total);
58		$(".js-store-finder").removeClass("show-store");
59
60	},
61
62
63	bindPagination:function ()
64	{
65
66
67		
68		$(document).on("click",".js-store-finder-details-back",function(e){
69			e.preventDefault();
70			
71			$(".js-store-finder").removeClass("show-store");
72			
73		})
74		
75
76
77
78		$(document).on("click",".js-store-finder-pager-prev",function(e){
79			e.preventDefault();
80			var page = ACC.storefinder.storeSearchData.page;
81			ACC.storefinder.getStoreData(page-1)
82			checkStatus(page-1);
83		})
84
85		$(document).on("click",".js-store-finder-pager-next",function(e){
86			e.preventDefault();
87			var page = ACC.storefinder.storeSearchData.page;
88			ACC.storefinder.getStoreData(page+1)
89			checkStatus(page+1);
90		})
91
92		function checkStatus(page){
93			if(page==0){
94				$(".js-store-finder-pager-prev").attr("disabled","disabled")
95			}else{
96				$(".js-store-finder-pager-prev").removeAttr("disabled")
97			}
98			
99			if(page == Math.floor(ACC.storefinder.storeData.total/10)){
100				$(".js-store-finder-pager-next").attr("disabled","disabled")
101			}else{
102				$(".js-store-finder-pager-next").removeAttr("disabled")
103			}
104		}
105
106	},
107
108
109	bindStoreChange:function()
110	{
111		$(document).on("change",".js-store-finder-input",function(e){
112			e.preventDefault();
113
114
115
116			storeData=ACC.storefinder.storeData["data"];
117
118			var storeId=$(this).data("id");
119
120			var $ele = $(".js-store-finder-details");
121			
122
123
124			$.each(storeData[storeId],function(key,value){
125				if(key=="image"){
126					if(value!=""){
127						$ele.find(".js-store-image").html('<img src="'+value+'" alt="" />');
128					}else{
129						$ele.find(".js-store-image").html('');
130					}
131				}else if(key=="productcode"){
132					$ele.find(".js-store-productcode").val(value);
133				}
134				else if(key=="openings"){
135					if(value!=""){
136						var $oele = $ele.find(".js-store-"+key);
137						var openings = "";
138						$.each(value,function(key2,value2){
139							openings += "<dt>"+key2+"</dt>";
140							openings += "<dd>"+value2+"</dd>";
141						});
142
143						$oele.html(openings);
144
145					}else{
146						$ele.find(".js-store-"+key).html('');
147					}
148
149				}
150				else if(key=="specialOpenings"){}
151				else if(key=="features"){
152					var features="";
153					$.each(value,function(key2,value2){
154						features += "<li>"+value2+"</li>";
155					});
156
157					$ele.find(".js-store-"+key).html(features);
158
159				}
160				else{
161					if(value!=""){
162						$ele.find(".js-store-"+key).html(value);
163					}else{
164						$ele.find(".js-store-"+key).html('');
165					}
166				}
167
168			})
169
170
171			ACC.storefinder.storeId = storeData[storeId];
172			ACC.storefinder.initGoogleMap();
173
174		})
175
176		$(document).on("click",".js-select-store-label",function(e){
177			$(".js-store-finder").addClass("show-store")
178		})
179
180		$(document).on("click",".js-back-to-storelist",function(e){
181			$(".js-store-finder").removeClass("show-store")
182		})
183
184	},
185
186
187
188	initGoogleMap:function(){
189
190		if($(".js-store-finder-map").length > 0){
191			ACC.global.addGoogleMapsApi("ACC.storefinder.loadGoogleMap");
192		}
193	},
194 
195	loadGoogleMap: function(){
196
197		storeInformation = ACC.storefinder.storeId;
198
199		if($(".js-store-finder-map").length > 0)
200		{			
201			$(".js-store-finder-map").attr("id","store-finder-map")
202			var centerPoint = new google.maps.LatLng(storeInformation["latitude"], storeInformation["longitude"]);
203			
204			var mapOptions = {
205				zoom: 13,
206				zoomControl: true,
207				panControl: true,
208				streetViewControl: false,
209				mapTypeId: google.maps.MapTypeId.ROADMAP,
210				center: centerPoint
211			}
212			
213			var map = new google.maps.Map(document.getElementById("store-finder-map"), mapOptions);
214			
215			var marker = new google.maps.Marker({
216				position: new google.maps.LatLng(storeInformation["latitude"], storeInformation["longitude"]),
217				map: map,
218				title: storeInformation["name"],
219				icon: "https://maps.google.com/mapfiles/marker" + 'A' + ".png"
220			});
221			var infowindow = new google.maps.InfoWindow({
222				content: storeInformation["name"],
223				disableAutoPan: true
224			});
225			google.maps.event.addListener(marker, 'click', function (){
226				infowindow.open(map, marker);
227			});
228		}
229		
230	},
231
232
233	bindSearch:function(){
234
235		$(document).on("submit",'#storeFinderForm', function(e){
236			e.preventDefault()
237			var q = $(".js-store-finder-search-input").val();
238
239			if(q.length>0){
240				ACC.storefinder.getInitStoreData(q);
241			}else{
242				if($(".js-storefinder-alert").length<1){
243					var emptySearchMessage = $(".btn-primary").data("searchEmpty")
244					$(".js-store-finder").hide();
245					$("#storeFinder").before('<div class="js-storefinder-alert alert alert-danger alert-dismissable" ><button class="close" type="button" data-dismiss="alert" aria-hidden="true">×</button>' + emptySearchMessage + '</div>');
246				}
247			}
248		})
249
250
251		$(".js-store-finder").hide();
252		$(document).on("click",'#findStoresNearMe', function(e){
253			e.preventDefault()
254			ACC.storefinder.getInitStoreData(null,ACC.storefinder.coords.latitude,ACC.storefinder.coords.longitude);
255		})
256
257
258	},
259
260
261	getStoreData: function(page){
262		ACC.storefinder.storeSearchData.page = page;
263		url= $(".js-store-finder").data("url");
264		$.ajax({
265			url: url,
266			data: ACC.storefinder.storeSearchData,
267			type: "get",
268			success: function (response){
269				ACC.storefinder.storeData = $.parseJSON(response);
270				ACC.storefinder.refreshNavigation();
271				if(ACC.storefinder.storeData.total < 10){
272					$(".js-store-finder-pager-next").attr("disabled","disabled");
273				}
274			}
275		});
276	},
277
278	getInitStoreData: function(q,latitude,longitude){
279		$(".alert").remove();
280		data ={
281			"q":"" ,
282			"page":0
283		}
284		if(q != null){
285			data.q = q;
286		}
287
288		if(latitude != null){
289			data.latitude = latitude;
290		}
291
292		if(longitude != null){
293			data.longitude = longitude;
294		}
295
296		ACC.storefinder.storeSearchData = data;
297		ACC.storefinder.getStoreData(data.page);
298		$(".js-store-finder").show();
299		$(".js-store-finder-pager-prev").attr("disabled","disabled")
300		$(".js-store-finder-pager-next").removeAttr("disabled")
301	},
302
303	init:function(){
304		$("#findStoresNearMe").attr("disabled","disabled");
305		if(navigator.geolocation){
306			navigator.geolocation.getCurrentPosition(
307				function (position){
308					ACC.storefinder.coords = position.coords;
309					$('#findStoresNearMe').removeAttr("disabled");
310				},
311				function (error)
312				{
313					console.log("An error occurred... The error code and message are: " + error.code + "/" + error.message);
314				}
315			);
316		}
317	}
318};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.