PageSourceSearch

https://www.ebshkdirect.com/hk/web/js/market-news.js?_=20260925

js ebshkdirect.com collected 2026-09-25 03:16:50 UTC 28,349 bytes, 722 lines download raw bytes

1$(document).ready(function() {
2
3  $(".third-lv-selector select").change(function() {
4    var tar = $(this).val()
5    $(".faq-answer").find(".show").slideUp(250, function() {
6      $(this).removeClass("show")
7      $(this).removeAttr("style")
8    })
9    $(".faq-answer").find("#ans" + tar).slideDown(250, function() {
10      $(this).addClass("show")
11      $(this).removeAttr("style")
12    })
13  })
14
15  $(".item-mob select").change(function() {
16    var tar = $(this).val()
17    window.location = tar
18  })
19
20  $(".btn-filter").click(function() {
21    $(".news-details .search-box").addClass("opened")
22  })
23
24  if ($('.news-details[data-news-page=header]').length > 0) {
25    var searchBtn = $('button.news-search-button');
26    var params = {};
27    if ('etnetNews' == searchBtn.attr('data-news-type')) {
28      params = {
29        category: searchBtn.attr('data-param-cate'),
30        date: searchBtn.attr('data-param-date')
31      };
32    } else if ('hkexBulletin' == searchBtn.attr('data-news-type')) {
33      params = {
34        date: searchBtn.attr('data-param-date')
35      };
36    } else if (('relatedEtnetNews' == searchBtn.attr('data-news-type') || 'relatedHkexBulletin' == searchBtn.attr('data-news-type')) && searchBtn.attr('data-param-stockcode')) {
37      params = {
38        stockCode: searchBtn.attr('data-param-stockcode'),
39      };
40    }
41    populateNewsHeader({
42      newsType: searchBtn.attr('data-news-type'),
43      recordPerPage: 10,
44      currentPage: searchBtn.attr('data-current-page'),
45      params: params
46    });
47  } else if ($('.news-details[data-news-page=content]').length > 0) {
48    populateNewsContent({
49      newsId: getParameterByName('id', window.location.href),
50      newsType: $('.news-details[data-news-type]').attr('data-news-type')
51    });
52  }
53  $(document).on('keydown', 'input#stock-code', function(e) {
54    if (e.keyCode === 13) {
55      $('button.news-search-button').trigger("click");
56      $(this).select();
57      e.preventDefault();
58      e.stopPropagation();
59    }
60  });
61  $(document).on('click', 'button.news-search-button, .news-page-num-left, .news-page-num-right', function(e) {
62    e.preventDefault();
63    e.stopPropagation();
64
65    var $this = $(this);
66    var searchBtn = $('button.news-search-button');
67    var goToPage = Number(searchBtn.attr('data-current-page'));
68    if ($this.hasClass('news-search-button')) {
69      if (searchBtn && searchBtn.attr('data-param-cate')) {
70        searchBtn.attr('data-param-cate', $('select#category').val());
71      }
72      if (searchBtn && searchBtn.attr('data-param-date')) {
73        searchBtn.attr('data-param-date', $('select#date').val());
74      }
75      if (searchBtn && $('input#stock-code')) {
76        searchBtn.attr('data-param-stockcode', $('input#stock-code').val());
77      }
78      searchBtn.attr('data-max-page', 1);
79      goToPage = 1;
80    } else if ($this.hasClass('news-page-num-left')) {
81      goToPage -= 1;
82    } else if ($this.hasClass('news-page-num-right')) {
83      goToPage += 1;
84    }
85
86    if (goToPage < 1 || goToPage > searchBtn.attr('data-max-page')) {
87      return;
88    }
89
90    var params = {};
91    if ('etnetNews' == searchBtn.attr('data-news-type')) {
92      params = {
93        category: searchBtn.attr('data-param-cate'),
94        date: searchBtn.attr('data-param-date')
95      };
96    } else if ('hkexBulletin' == searchBtn.attr('data-news-type')) {
97      params = {
98        date: searchBtn.attr('data-param-date')
99      };
100    } else if ('relatedEtnetNews' == searchBtn.attr('data-news-type') ||
101      'relatedHkexBulletin' == searchBtn.attr('data-news-type')) {
102      params = {
103        stockCode: searchBtn.attr('data-param-stockcode'),
104      };
105    }
106
107    populateNewsHeader({
108      newsType: searchBtn.attr('data-news-type'),
109      recordPerPage: 10,
110      currentPage: goToPage,
111      params: params
112    });
113  });
114
115  var stockCode = getStockCodeFromURL();
116  if (stockCode){
117	updateTPCMSSideMenu(stockCode);
118	// Update Stock Code in NWTE
119	if ($('body').hasClass('framed')){
120		var siteID = ((host_name.indexOf(shkf.api.SITE_OS.substring(shkf.api.SITE_OS.indexOf('.'))) > -1) ? 'os' : 'is');
121		var domain=(siteID=='os' ? '.ebshkdirect.com' : '.ebshkfg.com');
122		document.cookie = "ETNETSTOCKCODE=" + stockCode + "; path=/;domain=" + domain + ";";
123	}
124  }
125
126});
127
128function getCodeNum() {
129  var code = getParameterByName('code');
130  var src = $("#iframe-container iframe").attr("src")
131  var newSrc = src + "?code=" + code
132  $("#iframe-container iframe").attr("src", newSrc)
133};
134
135function getParameterByName(name, url) {
136  if (!url) url = window.location.href;
137  name = name.replace(/[\[\]]/g, "\\$&");
138  var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
139    results = regex.exec(url);
140  if (!results) return null;
141  if (!results[2]) return '';
142  return decodeURIComponent(results[2].replace(/\+/g, " "));
143};
144
145function appendQueryStringtoTarget(target) {
146  var URL = window.location.href;
147  var queryString = (URL.indexOf('?') > -1 ? URL.substring(URL.indexOf('?') + 1) : '');
148  var $targetElement = (!target ? $('#iframe-container iframe') : target);
149  var targetURLPrefix = $targetElement.attr('src');
150  if (queryString && queryString != null && queryString != '') {
151    if (targetURLPrefix.indexOf('?') > -1) {
152      if (queryString.indexOf('?') == 0) {
153        $targetElement.attr('src', targetURLPrefix + '&' + queryString.substring(1));
154      } else {
155        $targetElement.attr('src', targetURLPrefix + '&' + queryString);
156      }
157    } else {
158      if (queryString.indexOf('?') == 0) {
159        $targetElement.attr('src', targetURLPrefix + queryString);
160      } else {
161        $targetElement.attr('src', targetURLPrefix + '?' + queryString);
162      }
163    }
164  }
165};
166
167function buildiFrameURL(pageID, lang, target, userId) {
168  var getInfoByKey = function(theKey) {
169    var URLPrefix = etNETContentURL + '/content/shkf/' + ((lang.toLowerCase() == 'en') ? 'eng/' : ((extractURLDomain(window.location.href).indexOf(shkf.api.SITE_OS)>=0 || extractURLDomain(window.location.href).indexOf(shkf.api.SITE_IS)>=0) ? 'tc/' : 'sc/')); // TODO: check tc, sc works or not
170    var siteID = (host_name.indexOf(shkf.api.SITE_OS.substring(shkf.api.SITE_OS.indexOf('.'))) > -1) ? 'os' : (isPrivateUser.toUpperCase()=='Y' ? 'pv' : 'is');
171    var info = {
172      "info": [{
173        "key": "marketindicies",
174        "page": URLPrefix + "indexes_main.php" + "?cpyCode=" + siteID
175      }, {
176        "key": "top20movers",
177        "page": URLPrefix + "top20.php" + "?cpyCode=" + siteID
178      }, {
179        "key": "financialFutures",
180        "page": URLPrefix + "futures.php" + "?cpyCode=" + siteID
181      }, {
182        "key": "industrySector",
183        "page": URLPrefix + "industry_lead.php" + "?cpyCode=" + siteID
184      }, {
185        "key": "industryDetailByCode",
186        "page": URLPrefix + "industry_detail.php" + "?cpyCode=" + siteID
187      }, {
188        "key": "quote",
189        "page": URLPrefix + "quote.php" + "?cpyCode=" + siteID
190      }, {
191        "key": "chart",
192        "page": URLPrefix + "quote_chart.php" + "?cpyCode=" + siteID
193      }, {
194        "key": "companyinfo",
195        "page": URLPrefix + "ci_brief.php" + "?cpyCode=" + siteID
196      }, {
197        "key": "corporateaction",
198        "page": URLPrefix + "ca_resultannounce.php" + "?cpyCode=" + siteID
199      }, {
200        "key": "relatedWarrants",
201        "page": URLPrefix + "warrant_cbbc_search.php" + "?cpyCode=" + siteID
202      }, {
203        "key": "relatedCBBCS",
204        "page": URLPrefix + "warrant_cbbc_search.php" + "?cpyCode=" + siteID
205      }, {
206        "key": "relatedETNetNews",
207        "page": URLPrefix + "" + "?cpyCode=" + siteID
208      }, {
209        "key": "relatedSEHKBulletin",
210        "page": URLPrefix + "" + "?cpyCode=" + siteID
211      }, {
212        "key": "marginTable",
213        "page": URLPrefix + "" + "?cpyCode=" + siteID
214      }, {
215        "key": "marketCalendarOverview",
216        "page": URLPrefix + "market_calendar.php" + "?cpyCode=" + siteID
217      }, {
218        "key": "pressRelease",
219        "page": URLPrefix + "ci_cal_event.php" + "?cpyCode=" + siteID
220      }, {
221        "key": "resultAnnounce",
222        "page": URLPrefix + "ci_cal_result.php" + "?cpyCode=" + siteID
223      }, {
224        "key": "econFigures",
225        "page": URLPrefix + "ci_cal_figure.php" + "?cpyCode=" + siteID
226      }, {
227        "key": "ipoOverview",
228        "page": URLPrefix + "ipo.php" + "?cpyCode=" + siteID
229      }, {
230        "key": "ipoNews",
231        "page": URLPrefix + "ipo_news.php" + "?cpyCode=" + siteID
232      }, {
233        "key": "hotListedIPOs",
234        "page": URLPrefix + "ipo_hot.php" + "?cpyCode=" + siteID
235      }, {
236        "key": "listedIPOs",
237        "page": URLPrefix + "ipo_listed.php" + "?cpyCode=" + siteID
238      }, {
239        "key": "upcomingIPOs",
240        "page": URLPrefix + "ipo_listing.php" + "?cpyCode=" + siteID
241      }, {
242        "key": "ipoFAQs",
243        "page": URLPrefix + ".php" + "?cpyCode=" + siteID
244      }, {
245        "key": "cpybusinessreview",
246        "page": URLPrefix + "ci_detail.php" + "?cpyCode=" + siteID
247      }, {
248        "key": "cpycompanystructure",
249        "page": URLPrefix + "ci_structure.php" + "?cpyCode=" + siteID
250      }, {
251        "key": "cpyprofitloss",
252        "page": URLPrefix + "ci_pl.php" + "?cpyCode=" + siteID
253      }, {
254        "key": "cpyfinancialposition",
255        "page": URLPrefix + "ci_bs.php" + "?cpyCode=" + siteID
256      }, {
257        "key": "cpycashflow",
258        "page": URLPrefix + "ci_cashflow.php" + "?cpyCode=" + siteID
259      }, {
260        "key": "cpyfinancialratio",
261        "page": URLPrefix + "ci_ratio.php" + "?cpyCode=" + siteID
262      }, {
263        "key": "cadividend",
264        "page": URLPrefix + "ca_dividend.php" + "?cpyCode=" + siteID
265      }, {
266        "key": "cabuyback",
267        "page": URLPrefix + "ca_buyback.php" + "?cpyCode=" + siteID
268      }, {
269        "key": "caplacing",
270        "page": URLPrefix + "ca_placing.php" + "?cpyCode=" + siteID
271      }]
272    };
273
274    // Additional Logic on choosing ET Net page
275    var URL = window.location.href;
276    var queryString = (URL.indexOf('?') > -1 ? URL.substring(URL.indexOf('?') + 1) : '');
277    var searchKey = '';
278
279    if (pageID == 'industrySector' && queryString && queryString != null && queryString != '') {
280      searchKey = 'industryDetailByCode';
281	} else if ((pageID == 'companyinfo' || pageID =='corporateaction') && queryString && queryString != null && queryString != '') {
282		if (getParameterByName("subpage", URL)){
283			searchKey=getParameterByName("subpage", URL);
284		}
285    } else {
286      searchKey = theKey;
287    }
288
289    // Retrieve page by key
290    for (i = 0; i < info.info.length; i++) {
291      if (info.info[i].key == searchKey) {
292        return info.info[i];
293      }
294    }
295    return '';
296  };
297
298  var $targetElement = (!target ? $('#iframe-container iframe') : target);
299
300  var result = getInfoByKey(pageID);
301  if (result && result != null && result != '' && result.page && result.page != null && result.page != '') {
302    $targetElement.attr('src', result.page);
303    appendQueryStringtoTarget($targetElement);
304  }
305};
306
307function buildiFramePostLoginURL(pageID, target, token, lang) {
308  var getInfoByKey = function(theKey) {
309    var URLPrefix = etNETPostLoginURL + '/etnetProduct/User/';
310	var URLContentPrefix = etNETContentURL + '/content/shkf/' + ((lang && lang.toLowerCase() == 'en') ? 'eng/' : ((extractURLDomain(window.location.href).indexOf(shkf.api.SITE_OS)>=0 || extractURLDomain(window.location.href).indexOf(shkf.api.SITE_IS)>=0) ? 'tc/' : 'sc/')); // TODO: check tc, sc works or not
311
312
313    // Additional Logic on choosing ET Net page
314    var URL = window.location.href;
315    var queryString = (URL.indexOf('?') > -1 ? URL.substring(URL.indexOf('?') + 1) : '');
316	
317    var info = {
318      "info": [{
319        "key": "quote",
320        "page": URLPrefix + "VerifyUser?company=SHKF&token=" + token
321      }, {
322		  "key": "quoteAfterHandshake",
323		  "page": URLContentPrefix + 'quote.php?' + queryString
324	  }]
325    };
326
327
328    var searchKey = '';
329
330    searchKey = theKey;
331
332    // Retrieve page by key
333    for (i = 0; i < info.info.length; i++) {
334      if (info.info[i].key == searchKey) {
335        return info.info[i];
336      }
337    }
338    return '';
339  };
340
341  var $targetElement = (!target ? $('#iframe-container iframe') : target);
342
343  var result = getInfoByKey(pageID);
344  if (result && result != null && result != '' && result.page && result.page != null && result.page != '') {
345    $targetElement.attr('src', result.page);
346  }
347};
348
349var populateNewsContent = function(data) {
350  var newsType = data.newsType;
351  if ('relatedEtnetNews' === newsType){
352    newsType = 'etnetNews';
353  } else if ('relatedHkexBulletin' === newsType){
354    newsType = 'hkexBulletin';
355  }
356  var url = '/content/api/' + newsType + '/news/' + (lang === 'en/' ? 'E' : 'T') + '/' + data.newsId.replace(/[^0-9A-Z]/g, ''); 
357  $.ajax({
358    headers: {
359      'shkf-api-version':'v1'
360    },
361    url: url
362  }).done(function(response) {
363    var json = JSON.parse(response.replace(/\r\n/g, "").replace(/\n/g, ""));
364    if ('etnetNews' == newsType &&
365      json &&
366      json.mobileSysResp &&
367      json.mobileSysResp.retrieveETNetNewsFeedResponse &&
368      json.mobileSysResp.retrieveETNetNewsFeedResponse.relatedETNetNewsList &&
369      json.mobileSysResp.retrieveETNetNewsFeedResponse.relatedETNetNewsList[0].content &&
370      json.mobileSysResp.retrieveETNetNewsFeedResponse.resultStatus === 'OK') {
371      var newsId = json.mobileSysResp.retrieveETNetNewsFeedResponse.relatedETNetNewsList[0].id;
372      var content = json.mobileSysResp.retrieveETNetNewsFeedResponse.relatedETNetNewsList[0].content;
373      $.ajax({
374        headers: {
375          'shkf-api-version':'v1'
376        },
377        url: '/content/api/etnetNews/header/' + (lang === 'en/' ? 'E' : 'T') + '/10/0?category=all&date=all&newsId=' + newsId
378      }).done(function(headerResponse) {
379        var headerJson = JSON.parse(headerResponse.replace(/\r\n/g, "").replace(/\n/g, ""));
380        if (headerJson.mobileSysResp &&
381          headerJson.mobileSysResp.retrieveETNetNewsHeaderFeedResponse &&
382          headerJson.mobileSysResp.retrieveETNetNewsHeaderFeedResponse.relatedETNetNewsList &&
383          headerJson.mobileSysResp.retrieveETNetNewsHeaderFeedResponse.resultStatus === 'OK'){
384          var dateTime = headerJson.mobileSysResp.retrieveETNetNewsHeaderFeedResponse.relatedETNetNewsList[0].dateTime;
385          var header = headerJson.mobileSysResp.retrieveETNetNewsHeaderFeedResponse.relatedETNetNewsList[0].headline;
386          var dateLabel = '';
387          dateLabel += dateTime.substr(8, 2) + ':' + dateTime.substr(10, 2);
388          dateLabel += ' ';
389          dateLabel += dateTime.substr(6, 2) + '/' + dateTime.substr(4, 2);
390          $('.news-content').html('<h4 class="news-header" >' + dateLabel + '&nbsp;' + header + '</h4><br/>' + content);
391        }
392      });
393    } else if ('hkexBulletin' === newsType &&
394      json &&
395      json.mobileSysResp &&
396      json.mobileSysResp.retrieveSEHKBulletinResponse &&
397      json.mobileSysResp.retrieveSEHKBulletinResponse.relatedSEHKBulletinList &&
398      json.mobileSysResp.retrieveSEHKBulletinResponse.relatedSEHKBulletinList[0].headline &&
399      json.mobileSysResp.retrieveSEHKBulletinResponse.relatedSEHKBulletinList[0].content &&
400      json.mobileSysResp.retrieveSEHKBulletinResponse.resultStatus === 'OK') {
401      var dateTime = json.mobileSysResp.retrieveSEHKBulletinResponse.relatedSEHKBulletinList[0].dateTime;
402      var header = json.mobileSysResp.retrieveSEHKBulletinResponse.relatedSEHKBulletinList[0].headline;
403      var content = json.mobileSysResp.retrieveSEHKBulletinResponse.relatedSEHKBulletinList[0].content;
404      var dateLabel = '';
405      dateLabel += dateTime.substr(8, 2) + ':' + dateTime.substr(10, 2);
406      dateLabel += ' ';
407      dateLabel += dateTime.substr(6, 2) + '/' + dateTime.substr(4, 2);
408      $('.news-content').html('<h4 class="news-header" >' + dateLabel + '&nbsp;' + header + '</h4><br/>' + content);
409    }
410  });
411};
412
413var populateNewsHeader = function(data) {
414
415  var url = '';
416  if ('etnetNews' == data.newsType || 'hkexBulletin' === data.newsType) {
417    url = '/content/api/' + data.newsType + '/header/' + (lang === 'en/' ? 'E' : 'T') + '/' + data.recordPerPage + '/' + ((data.currentPage - 1) * data.recordPerPage);
418    if ('etnetNews' === data.newsType) {
419      url += '?category=' + data.params.category + '&date=' + data.params.date;
420    } else if ('hkexBulletin' === data.newsType) {
421      url += '?date=' + data.params.date;
422    }
423  } else if ('relatedEtnetNews' == data.newsType) {
424    if (!data.params.stockCode){
425      return;
426    }
427    url = '/content/api/stock/' + data.params.stockCode + '/etnetNews/' + (lang === 'en/' ? 'E' : 'T') + '/' + data.recordPerPage + '/' + ((data.currentPage - 1) * data.recordPerPage);
428  } else if ('relatedHkexBulletin' == data.newsType) {
429    if (!data.params.stockCode){
430      return;
431    }
432    url = '/content/api/stock/' + data.params.stockCode + '/hkexBulletin/' + (lang === 'en/' ? 'E' : 'T') + '/' + data.recordPerPage + '/' + ((data.currentPage - 1) * data.recordPerPage);
433  }
434  
435  updateTPCMSSideMenu(data.params.stockCode);
436  $('.navbar .lang a').each(function (idx, itm){
437    var $itm = $(itm);
438    var link = $itm.attr('href');
439    if (link && link.indexOf('http') === 0){
440      $itm.attr('href', addOrUpdateUrlParam(link, 'code', data.params.stockCode));
441    }
442  });
443  
444  // Update Stock Code in NWTE
445  if ($('body').hasClass('framed')){
446		var siteID = ((host_name.indexOf(shkf.api.SITE_OS.substring(shkf.api.SITE_OS.indexOf('.'))) > -1) ? 'os' : 'is');
447		var domain=(siteID=='os' ? '.ebshkdirect.com' : '.ebshkfg.com');
448		document.cookie = "ETNETSTOCKCODE=" + data.params.stockCode + "; path=/;domain=" + domain + ";";
449  }
450  
451  $.ajax({
452      headers: {
453          'shkf-api-version':'v1'
454      },
455      url: url
456    })
457    .done(function(response) {
458      var json = JSON.parse(response.replace(/\r\n/g, "").replace(/\n/g, ""));
459      var newsList = null;
460      var maxPage = 1;
461      var contentPage = '';
462      var isIframeContent = $('body').hasClass('framed');
463      
464
465      if ('etnetNews' == data.newsType &&
466        json &&
467        json.mobileSysResp &&
468        json.mobileSysResp.retrieveETNetNewsHeaderFeedResponse &&
469        json.mobileSysResp.retrieveETNetNewsHeaderFeedResponse.relatedETNetNewsList &&
470        json.mobileSysResp.retrieveETNetNewsHeaderFeedResponse.resultStatus === 'OK') {
471        newsList = json.mobileSysResp.retrieveETNetNewsHeaderFeedResponse.relatedETNetNewsList;
472        maxPage = Math.ceil(json.mobileSysResp.retrieveETNetNewsHeaderFeedResponse.totalRows / data.recordPerPage);
473        contentPage = '/hk/web/'+ lang  + 'market_news/et-news-content';
474      } else if (('hkexBulletin' == data.newsType || 'relatedHkexBulletin' == data.newsType) &&
475        json &&
476        json.mobileSysResp &&
477        json.mobileSysResp.retrieveSEHKBulletinHeaderListResponse &&
478        json.mobileSysResp.retrieveSEHKBulletinHeaderListResponse.relatedSEHKBulletinList &&
479        json.mobileSysResp.retrieveSEHKBulletinHeaderListResponse.resultStatus === 'OK') {
480        newsList = json.mobileSysResp.retrieveSEHKBulletinHeaderListResponse.relatedSEHKBulletinList;
481        maxPage = Math.ceil(json.mobileSysResp.retrieveSEHKBulletinHeaderListResponse.totalRows / data.recordPerPage);
482        contentPage = '/hk/web/'+ lang  + 'market_news/sehk-news-content';
483      } else if ('relatedEtnetNews' == data.newsType &&
484        json &&
485        json.mobileSysResp &&
486        json.mobileSysResp.retrieveRelatedETNetNewsHeaderFeedResponse &&
487        json.mobileSysResp.retrieveRelatedETNetNewsHeaderFeedResponse.relatedETNetNewsList &&
488        json.mobileSysResp.retrieveRelatedETNetNewsHeaderFeedResponse.resultStatus === 'OK') {
489        newsList = json.mobileSysResp.retrieveRelatedETNetNewsHeaderFeedResponse.relatedETNetNewsList;
490        maxPage = Math.ceil(json.mobileSysResp.retrieveRelatedETNetNewsHeaderFeedResponse.totalRows / data.recordPerPage);
491        contentPage = '/hk/web/'+ lang  + 'market_news/et-news-content';
492      }
493
494      // toggle pager
495      if (maxPage > 1) {
496        $('.news-page').show();
497      } else {
498        $('.news-page').hide();
499      }
500
501      $('.news-content .news-content-holder a').remove();
502      if (newsList) {
503        $.each(newsList, function(idx, itm) {
504          var dateLabel = '';
505          dateLabel += itm['dateTime'].substr(8, 2) + ':' + itm['dateTime'].substr(10, 2);
506          dateLabel += ' ';
507          dateLabel += itm['dateTime'].substr(6, 2) + '/' + itm['dateTime'].substr(4, 2);
508          $('.news-content .news-content-holder').append('<a href="' + contentPage + '?id=' + itm['id'] + '&newsType=' + data.newsType + '' + (data.params.stockCode ? '&code=' + data.params.stockCode : '') + (isIframeContent ? '&iframeContent=true' : '') + '" class="col"><div class="news-list-date" style="vertical-align: top;">' + dateLabel + '</div><div class="news-list-topic" style="max-width:80%;">' + itm['headline'] + '</div></a>');
509        });
510        $('.news-content .empty-content-holder').hide();
511      } else {
512        $('.news-content .empty-content-holder').show();
513      }
514      $('.news-content .news-page span:nth-child(2)').text(data.currentPage);
515      $('.news-content .news-page span:nth-child(3)').text('of ' + maxPage);
516
517      $('button.news-search-button').attr('data-max-page', maxPage);
518      $('button.news-search-button').attr('data-current-page', data.currentPage);
519
520    })
521    .always(function() {
522
523      $('button.news-search-button').attr('data-current-page', data.currentPage);
524    })
525    .fail(function() {
526
527    });
528
529};
530
531function getStockCodeFromURL(){
532	var info = shkf.api.getAllInfo();
533	for (i=0;i<info.info.length;i++){
534		if (window.location.href.indexOf(info.info[i].urlprefix)>=0) {
535			var stockCodeKey = 'code';
536			if (info.info[i].acceptstockcode && info.info[i].acceptstockcode.toLowerCase()=='y' && info.info[i].stockcodekey){
537				stockCodeKey=info.info[i].stockcodekey;
538			}
539			if (getQueryVariable(stockCodeKey)){
540				return getQueryVariable(stockCodeKey);
541			}
542		}
543	}
544	return '';
545};
546
547function extractURLDomain(url) {
548	var domain;
549
550	if (url.indexOf("://") > -1) {
551		domain = url.split(String.fromCharCode(47))[2];
552	}
553	else {
554		domain = url.split(String.fromCharCode(47))[0];
555	}
556	domain = domain.split(':')[0];
557
558	return domain;
559};
560
561function updateTPCMSSideMenu(stockcode) {
562	if (!stockcode){return;}
563	var getURLByKey = function (key){
564			var paraSite=(shkf.api.SITE_OS.indexOf(extractURLDomain(window.location.href))>=0 || shkf.api.KANHAN_SITE_OS.indexOf(extractURLDomain(window.location.href))>=0) ? 'os' : 'is';
565			var paraModule=key;
566			var paraLang=lang.substring(0,lang.length-1)=='en' ? 'en_US' : 'zh_TW' ;
567			var paraUser='';
568			var paraParams='';
569			var paraStockCode=stockcode;
570			
571			var info = shkf.api.getPageInfoByKey(paraModule);
572			if (info.acceptstockcode && info.acceptstockcode=='n'){
573				paraParams='code=' + stockcode;
574				paraStockCode='';
575			}
576			
577			return shkf.api.v2.getURL(paraSite, paraModule, paraLang, paraUser, paraParams, paraStockCode);
578	};
579	
580	$('.stockSearchSubMenuDesktop a').each(function(index){
581		if ($(this).attr('theKey')){
582			$(this).attr('href', (location.protocol ? location.protocol : 'https:') + '//' + getURLByKey($(this).attr('theKey')));
583		}
584	});
585	
586	$('.stockSearchSubMenuMobile').each(function(index){
587		if ($(this).attr('theKey')){
588			$(this).attr('value', (location.protocol ? location.protocol : 'https:') + '//' + getURLByKey($(this).attr('theKey')));
589		}
590	});
591};
592
593function addOrUpdateUrlParam(uri, paramKey, paramVal) {
594  var re = new RegExp("([?&])" + paramKey + "=[^&#]*", "i");
595  if (re.test(uri)) {
596    uri = uri.replace(re, '$1' + paramKey + "=" + paramVal);
597  } else {
598    var separator = /\?/.test(uri) ? "&" : "?";
599    uri = uri + separator + paramKey + "=" + paramVal;
600  }
601  return uri;
602};
603
604function popuplateForexRatesTable(){
605
606	var styleTable = function ($t){
607		$t.addClass('forex-rate nowrap');
608	};
609
610	var createTableHeader = function($t){
611			var updateLabel = (lang=='en/' ? 'Last Updated' : '最後更新');
612			var bidLabel = (lang=='en/' ? 'Bid' : '買入');
613			var askLabel = (lang=='en/'? 'Ask' : '賣出');
614			var ccyLabel = (lang=='en/'? 'Currency' : '外幣');
615
616			var $trhead = $(document.createElement('tr'));
617			$trhead.appendTo($t);
618
619			var $thCcy = $(document.createElement('th'));
620			$thCcy.html(ccyLabel);
621			$thCcy.appendTo($trhead);
622
623			var $thBid = $(document.createElement('th'));
624			$thBid.html(bidLabel);
625			$thBid.appendTo($trhead);
626
627			var $thAsk = $(document.createElement('th'));
628			$thAsk.html(askLabel);
629			$thAsk.appendTo($trhead);
630
631			var $thLU = $(document.createElement('th'));
632			$thLU.html(updateLabel);
633			$thLU.appendTo($trhead);
634	};
635
636	var addData = function($t, data){
637		var $tr = $(document.createElement('tr'));
638		$tr.appendTo($t);
639		var $tdCcy = $(document.createElement('td'));
640		if(data.ccyPairCode){
641			$tdCcy.text(data.ccyPairCode);
642		}
643		
644		$tdCcy.appendTo($tr);
645		var $tdBid = $(document.createElement('td'));
646		if(data.bid){
647			$tdBid.text(data.bid);
648		}
649		
650		$tdBid.appendTo($tr);
651		var $tdAsk = $(document.createElement('td'));
652		if(data.ask){
653			$tdAsk.text(data.ask);
654		}
655		
656		$tdAsk.appendTo($tr);
657		var $tdLU = $(document.createElement('td'));
658		if(data.ccyTimestamp){
659			var time = new Date();
660			time.setHours(data.ccyTimestamp.substring(0,2));
661			time.setHours(time.getHours()+8);
662			$tdLU.text(time.getHours()+":"+data.ccyTimestamp.substring(2,4)+":"+data.ccyTimestamp.substring(4,6));
663		}
664		
665		$tdLU.appendTo($tr);
666	};
667
668	var addLastUpdateCopyRightFooter = function($div, data){
669		if (data.mobileSysResp.sysMsgHeader.updateTime){
670			var $divUpdate = $(document.createElement('div'));
671			$divUpdate.addClass('last-update');
672			var hour = data.mobileSysResp.sysMsgHeader.updateTime.substring(8,10);
673			var min = data.mobileSysResp.sysMsgHeader.updateTime.substring(10,12);
674			var sec = data.mobileSysResp.sysMsgHeader.updateTime.substring(12,14);
675			$divUpdate.html((lang=='en/' ? 'Last Updated: ' : '最後更新: ') + hour + ':' + min + ':' + sec + '<br>' + (lang=='en/' ? 'Market data and prices provided are for reference only.' : '市場數據和價格僅供參考。'));
676			$divUpdate.appendTo($div);
677		}
678	};
679	
680	var addCopyRightFooter = function($div){
681		var $divCopyRight = $(document.createElement('div'));
682		$divCopyRight.addClass('copy-right');
683		$divCopyRight.html('<br>' + (lang=='en/' ? 'Market data and prices provided are for reference only.' : '市場數據和價格僅供參考。') + '&nbsp;');
684		$divCopyRight.appendTo($div);
685	};
686	
687	$.ajax({
688			url: '/content/api/forexfulllist',
689			dataType: "json",
690			contentType: "application/json; charset=utf-8",
691			success: function(data) {
692				if (data.mobileSysResp.retrieveForexRatesResponse.resultStatus == 'OK') { 	
693					var fxDataLength = data.mobileSysResp.retrieveForexRatesResponse.forexRateList.length;
694					var $div = $(document.createElement("div"));
695					var $t = $(document.createElement("table"));
696					$div.attr({ id : 'fxt' });
697					styleTable($t);
698					$("#fxt").fadeOut(function() {
699						$(this).replaceWith($div).fadeIn();
700					});
701
702					createTableHeader($t);
703
704					for(var i in data.mobileSysResp.retrieveForexRatesResponse.forexRateList){
705						addData($t, data.mobileSysResp.retrieveForexRatesResponse.forexRateList[i]);
706					}
707					$t.appendTo($div);
708					addLastUpdateCopyRightFooter($div,data);
709					addCopyRightFooter($div);
710
711				}
712			   }
713		  });
714
715};
716
717var onChangeMarketNewsSubNavOption = function(){
718	var valueNewTab = $('#marketNewsSubNavOption').find(':selected').attr('valueNewTab');
719	if (typeof valueNewTab !== typeof undefined && valueNewTab !== false) {
720		window.open(valueNewTab,'_blank');
721	}
722};

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.