PageSourceSearch

https://www.jbl.com.sg/on/demandware.static/Sites-JB-APAC-NCOM-Sit…/v1790551988158/js/app/103_faqupdate.js

js jbl.com.sg collected 2026-09-28 06:47:03 UTC 11,711 bytes, 342 lines download raw bytes

1$(document).ready(function(){
2	var maxQuestionsPerPage = 10,
3		maxPages = 5,
4		dataObj = {},
5		productName = $("h1.product-name").data("productname"),
6		productBrand = "",
7		filterdeProductName;
8	
9	if (!productName) {
10		productName = $("h1.headline").data("productname");
11	}
12
13	var errFaqNoSearch = function() {
14		var errMsg = $('.errnofaq').val();
15		$('.faq-data, .kba-results').html('<span class="error">' + errMsg + '</span>');
16	}
17
18	var hitFaqService = function(searchString){	
19    	var dataJson = {
20    			productName : productName,
21    			searchStr : searchString,
22    			productBrand : productBrand
23			};
24    	var params = {type: "POST", dataType: "json", data: JSON.stringify(dataJson)};
25		var findFaqUrl = app.util.appendParamsToUrl(app.urls.estFaqData, params);
26		$(".searchString").text(searchString.replace(" ~~~",""));
27		$('.faq-data, .kba-results').html("<div>Loading...   <progress></progress></div>");
28		$.ajax({
29			url: findFaqUrl,
30			success : function (data) {
31				dataObj = data;
32				if(data.searchRecords.length == 0){
33					$(".pdp-support-columns").addClass("-noresults");
34					$(document).trigger('js-faq-loaded');
35					errFaqNoSearch();
36					return;
37				}
38				$(".pdp-support-columns").removeClass("-noresults");
39				$(document).trigger('js-faq-loaded');
40				displayDataPageWise();
41			},
42			error: function(jq,status,message){
43				$(".pdp-support-columns").addClass("-noresults");
44				$(document).trigger('js-faq-loaded');
45				errFaqNoSearch();
46			}
47		})
48	};
49	$(document).on("click",".find-faq-data",function(e){
50	
51	    	e.preventDefault();
52	    	var searchStrings = $(this).prev(".faqCode-field").val();
53	    	 productName = productName.replace("+", " plus");
54			 filterdeProductName = productName.replace(/[^a-zA-Z0-9 ]/g, "") + " ~~~ " + searchStrings;			 
55			 var _str = removeBrandName(filterdeProductName);
56			 hitFaqService(_str);
57	 });
58	 var displayDataPageWise = function(){	
59		var isLegacyEnabled = !!$('.faq-data').length;
60		 $('.faq-data, .kba-results').html("");
61		 var toAppendString = "";
62		 var pageDots = "";
63		 var count = 0;
64		 var dots = "";
65		 if(dataObj.maxQuestionsPerPage != null && dataObj.maxPages){
66			 maxQuestionsPerPage = dataObj.maxQuestionsPerPage ;
67			 maxPages = dataObj.maxPages;
68		 }
69		 
70		 if(isLegacyEnabled) {
71			for(var i=0; i<dataObj.searchRecords.length; i++){
72			 
73				if(i <= maxQuestionsPerPage-1){
74					var template =   _.template('<li class="tabcontent" data-pageno="'+Math.ceil((i+1)/maxQuestionsPerPage)+'" data-id="<%=Id %>" data-articleNumber="<%=ArticleNumber %>">'+
75							   '<h4 class="faqQuestion"><%=Question__c %></h4>'+
76							   '<div class="content" style="display:none">'+
77								   '<p><%=Answer__c %></p>'+
78								   '<div class="feedback">'+
79									   '<span class="caption">'+ app.resources.FAQ_HELPFUL+'</span>'+
80									   '<div class="toggle">'+
81										   '<span  class="yes icon-thumb-up"></span>'+
82										   '<span  class="no icon-thumb-down"></span>'+
83									   '</div>'+
84								   '</div>'+
85							   '</div>'+							
86						   '</li>');
87						toAppendString += template(dataObj.searchRecords[i]); 
88				}
89				
90				if(count < maxPages && count !=  Math.ceil((i+1)/maxQuestionsPerPage)){
91					if(count == 0){
92						dots += "<span class='pageNavDots selectedfaqpage' data-pageno='"+(count+1)+"'></span>";
93					}else{
94						dots += "<span class='pageNavDots' data-pageno='"+(count+1)+"'></span>";
95					}
96				   
97				}
98				if(count >= maxPages){
99					break;
100				}
101				count = Math.ceil((i+1)/maxQuestionsPerPage);
102			}
103			
104		   var str = '<ul>'+toAppendString+'</ul>';
105		   var el = $.parseHTML( str )
106			$('.faq-data').append(el);
107			var dotsel = $.parseHTML('<div class="pageDots" style="text-align: center;">'+ dots +'</div>');
108			$('.faq-data').append(dotsel);
109			var pageCountel = $.parseHTML('<div class="pageCount" style="text-align: center;">'+ app.resources.FAQ_PAGE +' <span class="selectedPage">1</span><span class="totalNoOfPages">&#47;'+count+'</span>');
110			$('.faq-data').append(pageCountel);
111		 } else {
112			for(var i=0; i<dataObj.searchRecords.length; i++){
113				var currRecord = dataObj.searchRecords[i];
114				let answer = currRecord.Answer__c || '';
115				let question = currRecord.Question__c || '';
116				var template = '<div class="card kba -v2 type-' + currRecord.ArticleType + '"' +
117					'data-page="' + Math.ceil((i+1)/maxQuestionsPerPage) + '"' +
118					'data-articleNumber="' + currRecord.ArticleNumber + '"' +
119					'title="' + question + '"' +
120					'lang="en"' +
121					'href="' + currRecord.attributes.url + '"' +
122					'data-type="' + currRecord.ArticleType + '"' +
123					'data-kbaid="' + currRecord.Id + '"' +
124					'data-pinned=""' +
125					'data-length="' + answer.length + question.length + '">' +
126					'<div class ="kba-q">' +
127					'<span class="headline">' + question + '</span>' +
128					'</div>' +
129					'<div class="kba-a">' +
130					'<p>' + answer + '</p>' +
131					'</div>' +
132					'<button class="btn primary -readmore">Read more</button>' +
133					'<div class="feedback">' +
134					'<div class="title">' +
135					'<span class="active">' + 'Was this helpful' + '</span>' +
136					'<span class="feedback-thanks">' + 'Thank you for your feedback!' + '</span>' +
137					'</div>' +
138					'<div class="toggle active" data-id="">' +
139					'<span data-feedback="positive" class="icon-emoji-happy"></span>' +
140					'<span data-feedback="negative" class="icon-emoji-sad"></span>' +
141					'</div></div></div>';
142					toAppendString += template;
143			}
144			var el = $.parseHTML(toAppendString);
145			$('.kba-results').append(el);
146			$('.kba-results').trigger('js-pagination');
147		 }
148	 };
149	 var headerClick = function(){
150		 if($('.faq-data, .kba-results')[0] != undefined){
151			 if($('.faq-data, .kba-results')[0].children.length > 0)return;
152			 else{
153				 var searchStrings = productName;	
154				 searchStrings = searchStrings.replace("+", " plus");
155				 filterdeProductName = searchStrings.replace(/[^a-zA-Z0-9 ]/g, "")
156				 var _str = removeBrandName(filterdeProductName);
157				 hitFaqService(_str);
158			 }
159		 }
160		 
161	 };
162	 
163	
164	
165	 removerDuplicateValues = function(arr1){
166		 var arr2 = [];
167
168		 arr1.forEach(function(value){
169			 if(arr2.indexOf(value.toLowerCase()) == -1){
170				 arr2.push(value.toLowerCase());
171			 }
172		 })
173		 return arr2;
174	 }
175	
176	 var removeBrandName = function(str){		 
177		 
178		 str = str.trim();		 
179		 var arr = str.split(" ");	
180		 searchStrings = "";
181		 var removerdduplicatesArr = removerDuplicateValues(arr);
182		 var filterDuplicatesArr = [];
183		 
184		 $.each(removerdduplicatesArr, function(i, el){
185		     if($.inArray(el, filterDuplicatesArr) === -1){
186		    	 el = " "+el+" ";
187		    	 filterDuplicatesArr.push(el.replace(/ jbl | HK | Infinity | akg /gi,""));
188		     } 
189		 });
190		 for(var i=0;i<filterDuplicatesArr.length;i++){
191			 searchStrings += " "+filterDuplicatesArr[i];
192		 }
193		 return searchStrings.trim();
194	 }
195	 $(document).on("click","#faq-heading-mobile:not(.pdp-support)",function(evt){
196	 
197		 evt.preventDefault();
198		 headerClick();
199	 });
200	 
201	 $(document).on("click","#faq-heading:not(.pdp-support)",function(evt){
202	 
203		 evt.preventDefault();
204		 headerClick();
205	 });
206
207	 $(window).on('scroll', function (evt) {
208		var faq = $(".pdp-support, .faqs");
209		
210		if (faq && faq.length && faq.hasClass('in-view')) {
211			evt.preventDefault();
212			headerClick();
213		}
214	 });
215
216	 $(document).on("click",".faq-data",function(e){
217	 
218		 if($(e.target).hasClass("activeQuestion")){
219			 $(e.target).next(".content").slideUp(200);
220			 $(e.target).removeClass('activeQuestion');
221			 return;
222		 }
223		if(e.target.className == "faqQuestion"){
224			 $(e.target).addClass('activeQuestion');
225			 $(e.target).next(".content").slideDown(200);
226		 }
227	 });
228	//check-faq-track 
229	 $(document).on("click",".faq-data-track",function(e){
230	 
231		 if($(e.target).hasClass("activeQuestion")){
232			 $(e.target).next(".content").slideUp(200);
233			 $(e.target).removeClass('activeQuestion');
234			 return;
235		 }
236		 
237		 if( $(e.target.parentElement) &&  $(e.target.parentElement.children[1]) ) {
238			 if($(e.target.parentElement.children[1]).hasClass("activeQuestion")){
239				 $(e.target.parentElement.children[1]).next(".content").slideUp(200);
240				 $(e.target.parentElement.children[1]).removeClass('activeQuestion');
241				 return;
242			 }
243			 
244		 }
245		 
246		 if( $(e.target) &&  $(e.target.children[1]) ) {
247			 if($(e.target.children[1]).hasClass("activeQuestion")){
248				 $(e.target.children[1]).next(".content").slideUp(200);
249				 $(e.target.children[1]).removeClass('activeQuestion');
250				 return;
251			 }
252			 
253		 }
254		 
255		
256		 
257		if(e.target.className == "faqQuestion" ){
258			 $(e.target).addClass('activeQuestion');
259			 $(e.target).next(".content").slideDown(200);
260		 }
261		
262		
263		 if( $(e.target.parentElement) &&  $(e.target.parentElement.children[1]) ) {
264			if(e.target.parentElement.children[1].className =="faqQuestion" ) {
265				 $(e.target.parentElement.children[1]).addClass('activeQuestion');
266				 $(e.target.parentElement.children[1]).next(".content").slideDown(200);
267				
268			}
269		 }
270		 if( $(e.target) &&  $(e.target.children[1]) ) { 
271			 if(e.target.children[1].className == "faqQuestion" ){
272				 $(e.target.children[1]).addClass('activeQuestion');
273				 $(e.target.children[1]).next(".content").slideDown(200);
274			 }
275		 }	 
276	 });
277	 
278	 
279	 $(document).on("click",".pageNavDots", function(e){		
280		 $(".faq-data").find("ul").html("");
281		 var toAppendString = "";
282		 var navToPage = parseInt($(e.target).data("pageno"));
283		 $(".selectedfaqpage").removeClass("selectedfaqpage");
284		 $(e.target).addClass("selectedfaqpage");
285		 for(var i= navToPage * maxQuestionsPerPage - maxQuestionsPerPage; i < navToPage * maxQuestionsPerPage && i < dataObj.searchRecords.length; i++){
286				 var template =   _.template('<li class="tabcontent" data-pageno="'+Math.ceil((i+1)/maxQuestionsPerPage)+'" data-id="<%=Id %>" data-articleNumber="<%=ArticleNumber %>">'+
287							'<h4 class="faqQuestion"><%=Question__c %></h4>'+
288							'<div class="content" style="display:none">'+
289								'<p><%=Answer__c %></p>'+
290								'<div class="feedback">'+
291									'<span class="caption">'+ app.resources.FAQ_HELPFUL +'</span>'+
292									'<div class="toggle">'+
293										'<span  class="yes icon-thumb-up"></span>'+
294										'<span  class="no icon-thumb-down"></span>'+
295									'</div>'+
296								'</div>'+
297							'</div>'+							
298						'</li>');
299				 	toAppendString += template(dataObj.searchRecords[i]); 
300			
301		 }
302		 var str = toAppendString;
303		 var el = $.parseHTML( str )
304		 $(".faq-data").find("ul").append(el);
305		 $(".faq-data").find("ul").hide().fadeIn(500);
306		 $(".selectedPage").text(navToPage);
307		 
308		var stickyHeaderHeight,
309		xPos,
310		windowWidth = $(window).width();
311		if(windowWidth < 1100){
312			stickyHeaderHeight = $("#productDetailsFixedHeader").height();
313			xPos = $("#faq-collapse").find(".searchedforInfo").offset().top - stickyHeaderHeight;
314		}else{
315			stickyHeaderHeight = $("#productDetailsFixedHeader").height()+$("#productNavBar").height();
316			xPos = $("#spec-faq").find(".searchedforInfo").offset().top - stickyHeaderHeight;			
317		}		
318		app.util.scrollBrowser(xPos);
319		 
320	 });
321	 var sendFeedback =  function(vote,artNo){
322		 var dataJson = {
323	    			Vote : vote,
324	    			artId : artNo
325				};
326	    	var params = {type: "POST", dataType: "json", data: JSON.stringify(dataJson)};
327			var findFaqUrl = app.util.appendParamsToUrl(app.urls.createCustomFaqData, params);
328			$.ajax({
329				url: findFaqUrl
330			})
331	 };
332	 $(document).on("click",".toggle",function(e){
333		 var $target = $(e.target),
334		 	articleno = $target.closest(".tabcontent").data("articlenumber"),
335		 	vote = false;
336		 $target.closest(".feedback").html("<span class='userFeedback'>"+ app.resources.FAQ_THANKS +"</span>");
337		 if($target.hasClass("yes")){
338			 vote = true;
339		 }
340		 sendFeedback(vote, articleno);
341	 });
342});

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.