1mcWeb.bidBanner = new (function($) { 2 'use strict'; 3 var self = this; 4 self.daysTxt = 'DAY(S)'; 5 self.hoursTxt = 'HR(S)'; 6 self.minutesTxt = 'MIN(S)'; 7 self.secondsTxt = 'SEC(S)'; 8 self.startCountdown = function(bidId, days, hours, minutes, seconds){ 9 if(bidId === "") 10 return; 11 self.daysTxt = days; 12 self.hoursTxt = hours; 13 self.minutesTxt = minutes; 14 self.secondsTxt = seconds; 15 16 var banner = $("div[data-bid-id="+bidId +"]"); 17 var dateExpiry = banner.data("bid-end"); 18 var dateStart = banner.data("bid-start"); 19 var bidStarted = banner.data("bid-started"); 20 var bidEnded = banner.data("bid-expired"); 21 22 var startDate = new Date(dateStart).getTime(); 23 var endDate = new Date(dateExpiry).getTime(); 24 25 var now = new Date().getTime(); 26 if(startDate > now){ 27 bidStarted = false; 28 } 29 else{ 30 bidStarted = true; 31 } 32 33 if(endDate > now){ 34 bidEnded = false; 35 } else{ 36 bidEnded = true; 37 } 38 39 if(bidEnded === true && bidStarted === true){ 40 //show msg saying bid has ended 41 banner.find(".banner-bid-ended").removeClass("hide"); 42 } 43 else{ 44 if(bidStarted === true){ 45 //show countdown to when the sale ends 46 self.runCountdown(banner, banner.find(".banner-bid-countdown"), new Date(dateStart).getTime(), new Date(dateExpiry).getTime()); 47 } 48 else{ 49 //sale not started and not ended. Hence we can set a countdown to when it starts 50 self.runCountdown(banner, banner.find(".banner-bid-countdown"), new Date(dateStart).getTime(),new Date(dateExpiry).getTime()); 51 } 52 } 53 54 }; 55 56 //self.runCountdown = function(banner, salesCountdown, startDate, endDate){ 57 // var timer = setInterval(function() { 58 // var now = new Date().getTime(); 59 // salesCountdown.removeClass("hide"); 60 61 // var started; 62 // if(startDate > now){ 63 // started = false; 64 // } 65 // else{ 66 // started = true; 67 // } 68 // var bidEnded; 69 // if(endDate > now){ 70 // bidEnded = false; 71 // } else{ 72 // bidEnded = true; 73 // } 74 75 // var t; 76 // if(started) 77 // t = endDate - now; 78 // else t = startDate - now; 79 // var timeFromStart = startDate - now; 80 81 // if (t >= 0) { 82 // var showCountdown = true; 83 // var days = Math.floor(t / (1000 * 60 * 60 * 24)); 84 // var hours = Math.floor((t % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); 85 // var mins = Math.floor((t % (1000 * 60 * 60)) / (1000 * 60)); 86 // var secs = Math.floor((t % (1000 * 60)) / 1000); 87 // if(started){ 88 // if (timeFromStart > 0) { 89 // if (banner.find(".banner-bid-ended").hasClass("hide")) { 90 // banner.find(".banner-bid-ends-in").removeClass("hide"); 91 // banner.find(".banner-bid-starts-in").addClass("hide"); 92 // banner.find(".banner-bid-loading").addClass("hide"); 93 // } 94 // } else { 95 // var days2 = Math.floor(timeFromStart / (1000 * 60 * 60 * 24)); 96 // var hours2 = Math.floor((timeFromStart % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); 97 // var mins2 = Math.floor((timeFromStart % (1000 * 60 * 60)) / (1000 * 60)); 98 // var secs2 = Math.floor((timeFromStart % (1000 * 60)) / 1000); 99 100 // if (days2 <= 0 && days2 > -2 && hours2 <= 0 && hours2 > -2 && mins2 <= 0 && mins2 > -2 && secs2 > -5) { 101 // //show info that we are waiting for prices to load. It is now less than 5 seconds since sale started. Prices are being loaded on the server, lets wait 5 seconds before showing that is has started 102 // showCountdown = false; 103 // banner.find(".banner-bid-loading").removeClass("hide"); 104 // banner.find(".banner-bid-ends-in").addClass("hide"); 105 // banner.find(".banner-bid-starts-in").addClass("hide"); 106 // } 107 // else { 108 // banner.find(".banner-bid-starts-in").addClass("hide"); 109 // banner.find(".banner-bid-ends-in").removeClass("hide"); 110 // banner.find(".banner-bid-loading").addClass("hide"); 111 // } 112 // } 113 114 // } 115 // else{ 116 117 // if(banner.find(".banner-bid-starts-in").hasClass("hide")){ 118 // banner.find(".banner-bid-starts-in").removeClass("hide"); 119 // banner.find(".banner-bid-ends-in").addClass("hide"); 120 // banner.find(".banner-bid-loading").addClass("hide"); 121 // } 122 // } 123 124 125 126 // if(days <=0 && hours <= 0 && mins <= 0 && secs <= 1){ 127 // setTimeout(self.refreshPriceCache, 4000); 128 // setTimeout(self.refreshFields, 5000); 129 // } 130 // var countdown = ""; 131 132 // if (showCountdown) { 133 // if (days > 0) { 134 // countdown += days + "<span class='label'>" + self.daysTxt +"</span>"; 135 // } 136 // if (hours > 0 && days < 8) { 137 // countdown += hours + "<span class='label'>"+ self.hoursTxt + "</span>"; 138 // } 139 // if (mins > 0 && days === 0 && hours < 24 && days < 2) { 140 // countdown += mins + "<span class='label'>" + self.minutesTxt +"</span>"; 141 // } 142 // if (days === 0 && hours === 0) { 143 // countdown += secs + "<span class='label'>" +self.secondsTxt +"</span>"; 144 // } 145 // } 146 // jQuery(salesCountdown).html(countdown); 147 // } else { 148 ////the price for this product should now be invalid 149 // salesCountdown.removeClass("sale-countdown"); 150 // salesCountdown.data("bid-expires",""); 151 // salesCountdown.html(''); 152 // if(started){ 153 // if(banner.find(".banner-bid-ended").hasClass("hide")){ 154 // banner.find(".banner-bid-ended").removeClass("hide"); 155 // banner.find(".banner-bid-ends-in").addClass("hide"); 156 // self.refreshFields(); 157 // } 158 159 // } 160 // } 161 // }, 1000); 162 //} 163 164 165 self.runCountdown = function (banner, salesCountdown, startDate, endDate) { 166 var timer; 167 var refreshInterval = 1000; // Default to 1 second 168 var fieldsRefreshed = false; // Track if fields have been refreshed 169 170 function updateTimer() { 171 var now = new Date().getTime(); 172 salesCountdown.removeClass("hide"); 173 174 var started = startDate <= now; 175 var bidEnded = endDate <= now; 176 177 if (bidEnded) { 178 // Sale has ended 179 clearInterval(timer); 180 banner.find(".banner-bid-ended").removeClass("hide"); 181 banner.find(".banner-bid-ends-in").addClass("hide"); 182 banner.find(".banner-bid-starts-in").addClass("hide"); 183 banner.find(".banner-bid-loading").addClass("hide"); 184 185 // Refresh fields exactly once after the sale has ended 186 if (!fieldsRefreshed) { 187 self.refreshFields(); 188 fieldsRefreshed = true; 189 } 190 return; 191 } 192 193 if (started) { 194 // Sale has started 195 var timeSinceStart = now - startDate; 196 if (timeSinceStart < 10000) { 197 // Show loading banner for the first 4-5 seconds 198 banner.find(".banner-bid-loading").removeClass("hide"); 199 banner.find(".banner-bid-ends-in").addClass("hide"); 200 banner.find(".banner-bid-starts-in").addClass("hide"); 201 202 if (timeSinceStart > 4000 && timeSinceStart < 5000) { 203 // Refresh price cache and fields exactly once 204 self.refreshPriceCache(); 205 self.refreshFields(); 206 } 207 } else { 208 // Show ends-in banner after about 10 seconds 209 banner.find(".banner-bid-loading").addClass("hide"); 210 banner.find(".banner-bid-ends-in").removeClass("hide"); 211 banner.find(".banner-bid-starts-in").addClass("hide"); 212 } 213 } else { 214 // Sale has not started yet 215 banner.find(".banner-bid-starts-in").removeClass("hide"); 216 banner.find(".banner-bid-ends-in").addClass("hide"); 217 banner.find(".banner-bid-loading").addClass("hide"); 218 } 219 220 // Update countdown timer 221 var t = started ? endDate - now : startDate - now; 222 if (t >= 0) { 223 var days = Math.floor(t / (1000 * 60 * 60 * 24)); 224 var hours = Math.floor((t % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); 225 var mins = Math.floor((t % (1000 * 60 * 60)) / (1000 * 60)); 226 var secs = Math.floor((t % (1000 * 60)) / 1000); 227 228 var countdown = ""; 229 if (days > 0) { 230 countdown += days + "<span class='label'>" + self.daysTxt + "</span>"; 231 } 232 if (hours > 0 && days < 8) { 233 countdown += hours + "<span class='label'>" + self.hoursTxt + "</span>"; 234 } 235 if (mins > 0 && days === 0 && hours < 24 && days < 2) { 236 countdown += mins + "<span class='label'>" + self.minutesTxt + "</span>"; 237 } 238 if (days === 0 && hours === 0) { 239 countdown += secs + "<span class='label'>" + self.secondsTxt + "</span>"; 240 } 241 salesCountdown.html(countdown); 242 243 // Calculate total minutes remaining 244 var totalMinutesRemaining = Math.floor(t / (1000 * 60)); 245 246 // Adjust refresh interval based on remaining time 247 if (totalMinutesRemaining <= 60) { 248 refreshInterval = 1000; // Update every second 249 } else { 250 refreshInterval = 60000; // Update every minute 251 } 252 } else { 253 // Hide the countdown when it has completed 254 salesCountdown.html(''); 255 } 256 257 // Clear and restart the timer with the new interval 258 clearInterval(timer); 259 timer = setInterval(updateTimer, refreshInterval); 260 } 261 262 // Start the timer 263 timer = setInterval(updateTimer, refreshInterval); 264 } 265 self.refreshFields = function(){
266 var loadFirstParams = { 267 targetKey: ".ajax-field", 268 filterTargetKey: "#AttributeListBox", 269 onlyUpdateProductList: false, 270 doNotRenderFilter: false, 271 useDummyData: false, 272 popupFilter: 0, 273 nextPageNumber: 0 274 }; 275 window.mcWeb.ajaxRenderEngine.fieldsToLoad = []; 276 window.mcWeb.ajaxRenderEngine.fieldsToLoad.push(loadFirstParams); 277 window.mcWeb.ajaxRenderEngine.runUpdateFields(); 278 }; 279 280 self.refreshPriceCache = function() { 281 window.mcWeb.ajaxRenderEngine.refreshPriceCache(); 282 283 } 284})(jQuery);
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.