1(function (window) { 2 3 if(!!window.JCCatalogSectionDisc) { 4 return; 5 } 6 7 window.JCCatalogSectionDisc = function (arParams) { 8 this.productType = 0; 9 this.visual = { 10 ID: '', 11 PICT_ID: '', 12 PRICE_ID: '', 13 BUY_ID: '', 14 }; 15 this.product = { 16 name: '', 17 id: 0, 18 }; 19 20 this.offersView = null; 21 this.offers = []; 22 this.offerNum = 0; 23 this.treeProps = []; 24 this.obTreeRows = []; 25 this.selectedValues = {}; 26 this.selectProps = []; 27 this.obSelectRows = []; 28 29 this.obProduct = null; 30 this.obPict = null; 31 this.obPrice = null; 32 this.obBuy = null; 33 this.obTree = null; 34 this.obSelect = null; 35 36 this.errorCode = 0; 37 38 if('object' === typeof arParams) { 39 this.productType = parseInt(arParams.PRODUCT_TYPE, 10); 40 this.visual = arParams.VISUAL; 41 42 switch (this.productType) { 43 case 1://product 44 case 2://set 45 if(!!arParams.PRODUCT && 'object' === typeof(arParams.PRODUCT)) { 46 this.product.name = arParams.PRODUCT.NAME; 47 this.product.id = arParams.PRODUCT.ID; 48 if(!!arParams.SELECT_PROPS) { 49 this.selectProps = arParams.SELECT_PROPS; 50 } 51 } else { 52 this.errorCode = -1; 53 } 54 break; 55 case 3://sku 56 if(!!arParams.OFFERS && BX.type.isArray(arParams.OFFERS)) { 57 if(!!arParams.PRODUCT && 'object' === typeof(arParams.PRODUCT)) { 58 this.product.name = arParams.PRODUCT.NAME; 59 this.product.id = arParams.PRODUCT.ID; 60 if(!!arParams.SELECT_PROPS) { 61 this.selectProps = arParams.SELECT_PROPS; 62 } 63 } 64 if(!!arParams.OFFERS_VIEW) { 65 this.offersView = arParams.OFFERS_VIEW; 66 } 67 this.offers = arParams.OFFERS; 68 this.offerNum = 0; 69 if(!!arParams.OFFER_SELECTED) { 70 this.offerNum = parseInt(arParams.OFFER_SELECTED, 10); 71 } 72 if(isNaN(this.offerNum)) { 73 this.offerNum = 0; 74 } 75 if(!!arParams.TREE_PROPS) { 76 this.treeProps = arParams.TREE_PROPS; 77 } 78 } else { 79 this.errorCode = -1; 80 } 81 break; 82 default: 83 this.errorCode = -1; 84 } 85 } 86 if(0 === this.errorCode) { 87 BX.ready(BX.delegate(this.Init,this)); 88 } 89 }; 90 91 window.JCCatalogSectionDisc.prototype.Init = function() { 92 var i = 0, 93 strPrefix = '', 94 selPrefix = '', 95 TreeItems = null, 96 SelectItems = null; 97 98 this.obProduct = BX(this.visual.ID); 99 if(!this.obProduct) { 100 this.errorCode = -1; 101 } 102 103 if(3 === this.productType) { 104 if("LIST" !== this.offersView) { 105 this.obPict = BX(this.visual.PICT_ID); 106 if(!this.obPict) { 107 this.errorCode = -16; 108 } 109 110 this.obPrice = BX(this.visual.PRICE_ID); 111 if(!this.obPrice) { 112 this.errorCode = -16; 113 } 114 115 this.obBuy = BX(this.visual.BUY_ID); 116 if(!this.obBuy) { 117 this.errorCode = -16; 118 } 119 120 if(!!this.visual.TREE_ID) { 121 this.obTree = BX(this.visual.TREE_ID); 122 if(!this.obTree) { 123 this.errorCode = -256; 124 } 125 strPrefix = this.visual.TREE_ITEM_ID; 126 for(i = 0; i < this.treeProps.length; i++) { 127 this.obTreeRows[i] = { 128 LIST: BX(strPrefix+this.treeProps[i].ID+'_list'), 129 CONT: BX(strPrefix+this.treeProps[i].ID+'_cont') 130 }; 131 if(!this.obTreeRows[i].LIST || !this.obTreeRows[i].CONT) { 132 this.errorCode = -512; 133 break; 134 } 135 } 136 } 137 } 138 } 139 140 if(!!this.visual.SELECT_PROP_ID) { 141 this.obSelect = BX(this.visual.SELECT_PROP_ID); 142 if(!this.obSelect) { 143 this.errorCode = -256; 144 } 145 selPrefix = this.visual.SELECT_PROP_ITEM_ID; 146 for(i = 0; i < this.selectProps.length; i++) { 147 this.obSelectRows[i] = BX(selPrefix+this.selectProps[i].ID); 148 if(!this.obSelectRows[i]) { 149 this.errorCode = -512; 150 break; 151 } 152 } 153 } 154 155 if(0 === this.errorCode) { 156 switch (this.productType) { 157 case 1://product 158 if(!!this.obSelect) { 159 SelectItems = BX.findChildren(this.obSelect, {tagName: 'li'}, true); 160 if(!!SelectItems && 0 < SelectItems.length) { 161 for(i = 0; i < SelectItems.length; i++) { 162 BX.bind(SelectItems[i], 'click', BX.delegate(this.SelectProp, this)); 163 } 164 this.SetSelectCurrent(); 165 } 166 } 167 break; 168 case 3://sku 169 if("LIST" !== this.offersView) { 170 TreeItems = BX.findChildren(this.obTree, {tagName: 'li'}, true); 171 if(!!TreeItems && 0 < TreeItems.length) { 172 for(i = 0; i < TreeItems.length; i++) { 173 BX.bind(TreeItems[i], 'click', BX.delegate(this.SelectOfferProp, this)); 174 } 175 } 176 this.SetCurrent(); 177 } 178 179 if(!!this.obSelect) { 180 SelectItems = BX.findChildren(this.obSelect, {tagName: 'li'}, true); 181 if(!!SelectItems && 0 < SelectItems.length) { 182 for(i = 0; i < SelectItems.length; i++) { 183 BX.bind(SelectItems[i], 'click', BX.delegate(this.SelectProp, this)); 184 } 185 this.SetSelectCurrent(); 186 } 187 } 188 break; 189 } 190 } 191 }; 192 193 window.JCCatalogSectionDisc.prototype.SelectProp = function() { 194 var i = 0, 195 RowItems = null, 196 ActiveItems = null, 197 selPropValueArr = [], 198 SelectName = null, 199 SelectValue = null, 200 selAskOrderValueArr = [], 201 selPropValue = null, 202 selAskOrderValue = null, 203 MinselDelayOnclick = null, 204 MinselDelayOnclickArr = [], 205 MinselDelayOnclickNew = null, 206 selDelayOnclick = null, 207 selDelayOnclickArr = [], 208 selDelayOnclickNew = null, 209 target = BX.proxy_context; 210 211 if(!!target && target.hasAttribute('data-select-onevalue')) { 212 RowItems = BX.findChildren(target.parentNode, {tagName: 'li'}, false); 213 if(!!RowItems && 0 < RowItems.length) { 214 for(i = 0; i < RowItems.length; i++) { 215 BX.removeClass(RowItems[i], 'active'); 216 } 217 } 218 BX.addClass(target, 'active'); 219 } 220 221 ActiveItems = BX.findChildren(this.obSelect, {tagName: 'li', className: 'active'}, true); 222 if(!!ActiveItems && 0 < ActiveItems.length) { 223 for(i = 0; i < ActiveItems.length; i++) { 224 selPropValueArr[i] = ActiveItems[i].getAttribute('data-select-onevalue');
225 /*ASK_ORDER*/ 226 SelectName = BX.findChildren(ActiveItems[i].parentNode.parentNode.parentNode, {className: 'h3'}, true); 227 SelectValue = BX.findChildren(ActiveItems[i], {tagName: 'span'}, true); 228 if((!!SelectName && 0 < SelectName.length) && (!!SelectValue && 0 < SelectValue.length)) { 229 selAskOrderValueArr[i] = SelectName[0].innerHTML+': '+SelectValue[0].innerHTML; 230 } 231 } 232 } 233 234 selPropValue = selPropValueArr.join('||'); 235 selAskOrderValue = selAskOrderValueArr.join('; '); 236 237 if(!!this.offers && 0 < this.offers.length) { 238 for(i = 0; i < this.offers.length; i++) { 239 /*CART*/ 240 if(!!BX('select_props_disc_'+this.offers[i].ID)) 241 BX('select_props_disc_'+this.offers[i].ID).value = selPropValue; 242 /*MIN_DELAY*/ 243 if(!!BX('catalog-item-delay-disc-min-'+this.offers[i].ID)) { 244 MinselDelayOnclick = BX('catalog-item-delay-disc-min-'+this.offers[i].ID).getAttribute('onclick'); 245 MinselDelayOnclickArr = MinselDelayOnclick.split("',"); 246 MinselDelayOnclickArr[3] = " '"+selPropValue; 247 MinselDelayOnclickNew = MinselDelayOnclickArr.join("',"); 248 BX('catalog-item-delay-disc-min-'+this.offers[i].ID).setAttribute('onclick', MinselDelayOnclickNew); 249 } 250 /*DELAY*/ 251 if(!!BX('catalog-item-delay-disc-'+this.offers[i].ID)) { 252 selDelayOnclick = BX('catalog-item-delay-disc-'+this.offers[i].ID).getAttribute('onclick'); 253 selDelayOnclickArr = selDelayOnclick.split("',"); 254 selDelayOnclickArr[3] = " '"+selPropValue; 255 selDelayOnclickNew = selDelayOnclickArr.join("',"); 256 BX('catalog-item-delay-disc-'+this.offers[i].ID).setAttribute('onclick', selDelayOnclickNew); 257 } 258 /*BOC*/ 259 if(!!BX('boc_element_select_props_disc_'+this.offers[i].ID)) 260 BX('boc_element_select_props_disc_'+this.offers[i].ID).value = selPropValue; 261 /*ASK_PRICE*/ 262 if(!!BX('ask_price_message_disc_'+this.offers[i].ID)) 263 BX('ask_price_message_disc_'+this.offers[i].ID).innerHTML = this.AskPriceMessageNew[i]+'; '+selAskOrderValue+')'; 264 /*ORDER*/ 265 if(!!BX('order_message_disc_'+this.offers[i].ID)) 266 BX('order_message_disc_'+this.offers[i].ID).innerHTML = this.OrderMessageNew[i]+'; '+selAskOrderValue+')'; 267 } 268 } else { 269 /*CART*/ 270 if(!!BX('select_props_disc_'+this.product.id)) 271 BX('select_props_disc_'+this.product.id).value = selPropValue; 272 /*DELAY*/ 273 if(!!BX('catalog-item-delay-disc-'+this.product.id)) { 274 selDelayOnclick = BX('catalog-item-delay-disc-'+this.product.id).getAttribute('onclick'); 275 selDelayOnclickArr = selDelayOnclick.split("',"); 276 selDelayOnclickArr[3] = " '"+selPropValue; 277 selDelayOnclickNew = selDelayOnclickArr.join("',"); 278 BX('catalog-item-delay-disc-'+this.product.id).setAttribute('onclick', selDelayOnclickNew); 279 } 280 } 281 } 282 283 window.JCCatalogSectionDisc.prototype.SelectOfferProp = function() { 284 var i = 0, 285 value = '', 286 strTreeValue = '', 287 arTreeItem = [], 288 RowItems = null, 289 target = BX.proxy_context; 290 291 if(!!target && target.hasAttribute('data-treevalue')) { 292 strTreeValue = target.getAttribute('data-treevalue'); 293 arTreeItem = strTreeValue.split('_'); 294 if(this.SearchOfferPropIndex(arTreeItem[0], arTreeItem[1])) { 295 RowItems = BX.findChildren(target.parentNode, {tagName: 'li'}, false); 296 if(!!RowItems && 0 < RowItems.length) { 297 for(i = 0; i < RowItems.length; i++) { 298 value = RowItems[i].getAttribute('data-onevalue'); 299 if(value === arTreeItem[1]) { 300 BX.addClass(RowItems[i], 'active'); 301 } else { 302 BX.removeClass(RowItems[i], 'active'); 303 } 304 } 305 } 306 } 307 } 308 }; 309 310 window.JCCatalogSectionDisc.prototype.SearchOfferPropIndex = function(strPropID, strPropValue) { 311 var strName = '', 312 arShowValues = false, 313 i, j, 314 arCanBuyValues = [], 315 index = -1, 316 arFilter = {}; 317 318 for(i = 0; i < this.treeProps.length; i++) { 319 if(this.treeProps[i].ID === strPropID) { 320 index = i; 321 break; 322 } 323 } 324 325 if(-1 < index) { 326 for(i = 0; i < index; i++) { 327 strName = 'PROP_'+this.treeProps[i].ID; 328 arFilter[strName] = this.selectedValues[strName]; 329 } 330 strName = 'PROP_'+this.treeProps[index].ID; 331 arShowValues = this.GetRowValues(arFilter, strName); 332 if(!arShowValues) { 333 return false;
334 } 335 if(!BX.util.in_array(strPropValue, arShowValues)) { 336 return false; 337 } 338 arFilter[strName] = strPropValue; 339 for(i = index+1; i < this.treeProps.length; i++) { 340 strName = 'PROP_'+this.treeProps[i].ID; 341 arShowValues = this.GetRowValues(arFilter, strName); 342 if(!arShowValues) { 343 return false; 344 } 345 arCanBuyValues = arShowValues; 346 if(!!this.selectedValues[strName] && BX.util.in_array(this.selectedValues[strName], arCanBuyValues)) { 347 arFilter[strName] = this.selectedValues[strName]; 348 } else { 349 arFilter[strName] = arCanBuyValues[0]; 350 } 351 this.UpdateRow(i, arFilter[strName], arShowValues, arCanBuyValues); 352 } 353 this.selectedValues = arFilter; 354 this.ChangeInfo(); 355 } 356 return true; 357 }; 358 359 window.JCCatalogSectionDisc.prototype.UpdateRow = function(intNumber, activeID, showID, canBuyID) { 360 var i = 0, 361 showI = 0, 362 value = '', 363 obData = {}, 364 isCurrent = false, 365 selectIndex = 0, 366 RowItems = null; 367 368 if(-1 < intNumber && intNumber < this.obTreeRows.length) { 369 RowItems = BX.findChildren(this.obTreeRows[intNumber].LIST, {tagName: 'li'}, false); 370 if(!!RowItems && 0 < RowItems.length) { 371 obData = { 372 props: { className: '' }, 373 style: {} 374 }; 375 for(i = 0; i < RowItems.length; i++) { 376 value = RowItems[i].getAttribute('data-onevalue'); 377 isCurrent = (value === activeID); 378 if(BX.util.in_array(value, canBuyID)) { 379 obData.props.className = (isCurrent ? 'active' : ''); 380 } else { 381 obData.props.className = (isCurrent ? 'active hidden' : 'hidden'); 382 } 383 obData.style.display = 'none'; 384 if(BX.util.in_array(value, showID)) { 385 obData.style.display = ''; 386 if(isCurrent) { 387 selectIndex = showI; 388 } 389 showI++; 390 } 391 BX.adjust(RowItems[i], obData); 392 } 393 394 obData = { 395 style: {} 396 }; 397 398 BX.adjust(this.obTreeRows[intNumber].LIST, obData); 399 } 400 } 401 }; 402 403 window.JCCatalogSectionDisc.prototype.GetRowValues = function(arFilter, index) { 404 var i = 0, 405 j, 406 arValues = [], 407 boolSearch = false, 408 boolOneSearch = true; 409 410 if(0 === arFilter.length) { 411 for(i = 0; i < this.offers.length; i++) { 412 if(!BX.util.in_array(this.offers[i].TREE[index], arValues)) { 413 arValues[arValues.length] = this.offers[i].TREE[index]; 414 } 415 } 416 boolSearch = true; 417 } else { 418 for(i = 0; i < this.offers.length; i++) { 419 boolOneSearch = true; 420 for(j in arFilter) { 421 if(arFilter[j] !== this.offers[i].TREE[j]) { 422 boolOneSearch = false; 423 break; 424 } 425 } 426 if(boolOneSearch) { 427 if(!BX.util.in_array(this.offers[i].TREE[index], arValues)) { 428 arValues[arValues.length] = this.offers[i].TREE[index]; 429 } 430 boolSearch = true; 431 } 432 } 433 } 434 return (boolSearch ? arValues : false); 435 }; 436 437 window.JCCatalogSectionDisc.prototype.SetSelectCurrent = function() { 438 var i = 0, 439 SelectItems = null, 440 selPropValueArr = [], 441 SelectName = null, 442 SelectValue = null, 443 selAskOrderValueArr = [], 444 selPropValue = null, 445 selAskOrderValue = null, 446 MinselDelayOnclick = null, 447 MinselDelayOnclickArr = [], 448 MinselDelayOnclickNew = null, 449 selDelayOnclick = null, 450 selDelayOnclickArr = [], 451 selDelayOnclickNew = null; 452 this.AskPriceMessageNew = []; 453 this.OrderMessageNew = []; 454 455 for(i = 0; i < this.obSelectRows.length; i++) { 456 SelectItems = BX.findChildren(this.obSelectRows[i], {tagName: 'li'}, true); 457 if(!!SelectItems && 0 < SelectItems.length) { 458 BX.addClass(SelectItems[0], 'active'); 459 selPropValueArr[i] = SelectItems[0].getAttribute('data-select-onevalue'); 460 } 461 /*ASK_ORDER*/ 462 SelectName = BX.findChildren(this.obSelectRows[i], {className: 'h3'}, true); 463 SelectValue = BX.findChildren(SelectItems[0], {tagName: 'span'}, true); 464 if((!!SelectName && 0 < SelectName.length) && (!!SelectValue && 0 < SelectValue.length)) { 465 selAskOrderValueArr[i] = SelectName[0].innerHTML+': '+SelectValue[0].innerHTML; 466 } 467 } 468 469 selPropValue = selPropValueArr.join('||'); 470 selAskOrderValue = selAskOrderValueArr.join('; '); 471 472 if(!!this.offers && 0 < this.offers.length) { 473 for(i = 0; i < this.offers.length; i++) { 474 /*CART*/ 475 if(!!BX('select_props_disc_'+this.offers[i].ID)) 476 BX('select_props_disc_'+this.offers[i].ID).value = selPropValue; 477 /*MIN_DELAY*/
478 if(!!BX('catalog-item-delay-disc-min-'+this.offers[i].ID)) { 479 MinselDelayOnclick = BX('catalog-item-delay-disc-min-'+this.offers[i].ID).getAttribute('onclick'); 480 MinselDelayOnclickArr = MinselDelayOnclick.split("',"); 481 MinselDelayOnclickArr[3] = " '"+selPropValue; 482 MinselDelayOnclickNew = MinselDelayOnclickArr.join("',"); 483 BX('catalog-item-delay-disc-min-'+this.offers[i].ID).setAttribute('onclick', MinselDelayOnclickNew); 484 } 485 /*DELAY*/ 486 if(!!BX('catalog-item-delay-disc-'+this.offers[i].ID)) { 487 selDelayOnclick = BX('catalog-item-delay-disc-'+this.offers[i].ID).getAttribute('onclick'); 488 selDelayOnclickArr = selDelayOnclick.split("',"); 489 selDelayOnclickArr[3] = " '"+selPropValue; 490 selDelayOnclickNew = selDelayOnclickArr.join("',"); 491 BX('catalog-item-delay-disc-'+this.offers[i].ID).setAttribute('onclick', selDelayOnclickNew); 492 } 493 /*BOC*/ 494 if(!!BX('boc_element_select_props_disc_'+this.offers[i].ID)) 495 BX('boc_element_select_props_disc_'+this.offers[i].ID).value = selPropValue; 496 /*ASK_PRICE*/ 497 if(!!BX('ask_price_message_disc_'+this.offers[i].ID)) { 498 this.AskPriceMessage = BX('ask_price_message_disc_'+this.offers[i].ID).innerHTML; 499 this.AskPriceMessageArr = this.AskPriceMessage.split(')'); 500 this.AskPriceMessageNew[i] = this.AskPriceMessageArr[0]; 501 BX('ask_price_message_disc_'+this.offers[i].ID).innerHTML = this.AskPriceMessageNew[i]+'; '+selAskOrderValue+')'; 502 } 503 /*ORDER*/ 504 if(!!BX('order_message_disc_'+this.offers[i].ID)) { 505 this.OrderMessage = BX('order_message_disc_'+this.offers[i].ID).innerHTML; 506 this.OrderMessageArr = this.OrderMessage.split(')'); 507 this.OrderMessageNew[i] = this.OrderMessageArr[0]; 508 BX('order_message_disc_'+this.offers[i].ID).innerHTML = this.OrderMessageNew[i]+'; '+selAskOrderValue+')'; 509 } 510 } 511 } else { 512 /*CART*/ 513 if(!!BX('select_props_disc_'+this.product.id)) 514 BX('select_props_disc_'+this.product.id).value = selPropValue; 515 /*DELAY*/ 516 if(!!BX('catalog-item-delay-disc-'+this.product.id)) { 517 selDelayOnclick = BX('catalog-item-delay-disc-'+this.product.id).getAttribute('onclick'); 518 selDelayOnclickArr = selDelayOnclick.split("',"); 519 selDelayOnclickArr[3] = " '"+selPropValue; 520 selDelayOnclickNew = selDelayOnclickArr.join("',"); 521 BX('catalog-item-delay-disc-'+this.product.id).setAttribute('onclick', selDelayOnclickNew); 522 } 523 } 524 } 525 526 window.JCCatalogSectionDisc.prototype.SetCurrent = function() { 527 var i = 0, 528 j = 0, 529 arCanBuyValues = [], 530 strName = '', 531 arShowValues = false, 532 arFilter = {}, 533 current = this.offers[this.offerNum].TREE; 534 535 for(i = 0; i < this.treeProps.length; i++) { 536 strName = 'PROP_'+this.treeProps[i].ID; 537 arShowValues = this.GetRowValues(arFilter, strName); 538 if(!arShowValues) { 539 break; 540 } 541 if(BX.util.in_array(current[strName], arShowValues)) { 542 arFilter[strName] = current[strName]; 543 } else { 544 arFilter[strName] = arShowValues[0]; 545 this.offerNum = 0; 546 } 547 arCanBuyValues = arShowValues; 548 this.UpdateRow(i, arFilter[strName], arShowValues, arCanBuyValues); 549 } 550 this.selectedValues = arFilter; 551 this.ChangeInfo(); 552 }; 553 554 window.JCCatalogSectionDisc.prototype.ChangeInfo = function() { 555 var i = 0, 556 j, 557 index = -1, 558 boolOneSearch = true; 559 560 for(i = 0; i < this.offers.length; i++) { 561 boolOneSearch = true; 562 for(j in this.selectedValues) { 563 if(this.selectedValues[j] !== this.offers[i].TREE[j]) { 564 boolOneSearch = false; 565 break; 566 } 567 } 568 if(boolOneSearch) { 569 index = i; 570 break; 571 } 572 } 573 if(-1 < index) { 574 this.setPict(this.product.id, this.offers[index].ID); 575 this.setPrice(this.product.id, this.offers[index].ID); 576 this.setBuy(this.product.id, this.offers[index].ID); 577 this.offerNum = index; 578 } 579 }; 580 581 window.JCCatalogSectionDisc.prototype.setPict = function(item_id, offer_id) { 582 PictItems = BX.findChildren(this.obPict, {className: 'img'}, true); 583 if(!!PictItems && 0 < PictItems.length) { 584 for(i = 0; i < PictItems.length; i++) { 585 BX.addClass(PictItems[i], 'hidden'); 586 } 587 } 588 BX.removeClass(BX('img_disc_'+item_id+'_'+offer_id), 'hidden'); 589 }; 590 591 window.JCCatalogSectionDisc.prototype.setPrice = function(item_id, offer_id) { 592 PriceItems = BX.findChildren(this.obPrice, {className: 'price'}, true); 593 if(!!PriceItems && 0 < PriceItems.length) { 594 for(i = 0; i < PriceItems.length; i++) { 595 BX.addClass(PriceItems[i], 'hidden'); 596 } 597 } 598 BX.removeClass(BX('price_disc_'+item_id+'_'+offer_id), 'hidden'); 599 }; 600 601 window.JCCatalogSectionDisc.prototype.setBuy = function(item_id, offer_id) { 602 BuyItems = BX.findChildren(this.obBuy, {className: 'buy_more'}, true); 603 if(!!BuyItems && 0 < BuyItems.length) { 604 for(i = 0; i < BuyItems.length; i++) { 605 BX.addClass(BuyItems[i], 'hidden'); 606 } 607 } 608 BX.removeClass(BX('buy_more_disc_'+item_id+'_'+offer_id), 'hidden'); 609 }; 610})(window);
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.