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