PageSourceSearch

https://www.concordia.edu/_resources/js/scripts.js

js concordia.edu collected 2026-10-01 10:31:33 UTC 22,995 bytes, 803 lines download raw bytes

1$(function () {
2  // BACKGROUND DIM OVERLAY FOR MAIN MENU [Ticket #102758 05.24.2022] ///////////////////////////////
3  const header = document.getElementsByTagName("header")[0];
4
5  // this is the overlay we'll use to darken the background when the menu is open
6  let dynamicOverlay = document.createElement("div");
7  dynamicOverlay.id = "dynamicOverlay";
8  dynamicOverlay.className = "menu-overlay";
9
10  // add to the DOM, but don't display yet
11  header.appendChild(dynamicOverlay);
12
13  let toggle = document.getElementById("mainNavToggle");
14  let searchToggle = document.getElementById("searchtoggle");
15
16  let label = $("LABEL#mainNavTog");
17  let searchLabel = $("LABEL#searchtog");
18
19  label.on("click", function (e) {
20    toggle.checked = !toggle.checked;
21  });
22  searchLabel.on("click", function (e) {
23    searchToggle.checked = !searchToggle.checked;
24  });
25
26  const closeMenu = function () {
27    toggle.checked = false;
28    $(".mainNav label").removeClass("open");
29    $("#dynamicOverlay").hide();
30    // unbind keydown event
31    $(document).off("keydown");
32  };
33
34  const closeSearch = function () {
35    searchToggle.checked = false;
36    $(".search-toggle label").removeClass("open");
37    $("#dynamicOverlay").hide();
38    // unbind keydown event
39    $(document).off("keydown");
40  };
41
42  // init checkbox as unchecked, menu as 'closed'
43  closeMenu();
44  closeSearch();
45
46  $("#mainNavToggle").on("change", function (e) {
47    // update the classes (from orig. script)
48    $(".mainNav label").addClass("open");
49    $("#searchtoggle").prop("checked", false);
50    $(".search-toggle label").removeClass("open");
51
52    if ($("#mainNavToggle").is(":checked")) {
53      closeMenu();
54    } else {
55      toggle.checked = true;
56      // show overlay and close menu when user clicks on it
57      $("#dynamicOverlay")
58        .show()
59        .on("click", function () {
60          closeMenu();
61        });
62      // close menu when user hits "ESC"
63      $(document).on("keydown", function (e) {
64        if (e.keyCode == "27") {
65          closeMenu();
66        }
67      });
68    }
69  });
70
71  $("#searchtoggle").on("change", function (e) {
72    // update the classes (from orig. script)
73    $(".search-toggle label").addClass("open");
74    $("#mainNavToggle").prop("checked", false);
75    $(".mainNav label").removeClass("open");
76
77    if ($("#searchtoggle").is(":checked")) {
78      closeSearch();
79    } else {
80      searchToggle.checked = true;
81      // show overlay and close menu when user clicks on it
82      $("#dynamicOverlay")
83        .show()
84        .on("click", function () {
85          closeSearch();
86        });
87      // close menu when user hits "ESC"
88      $(document).on("keydown", function (e) {
89        if (e.keyCode == "27") {
90          closeSearch();
91        }
92      });
93    }
94  });
95});
96
97var _DeferredScripts = _DeferredScripts || [];
98function initDeferredVideos() {
99  var maxVideoResolution = 768;
100  $("video.defer.init").each(function () {
101    if (window.innerWidth >= maxVideoResolution) {
102      $(this)
103        .find("source")
104        .each(function () {
105          var sourceFile = $(this).attr("data-src");
106          $(this).attr("src", sourceFile);
107        });
108      $(this).removeClass("init");
109      var video = $(this)[0];
110      video.load();
111      video.play();
112    }
113  });
114  $("video.defer:not(.init)").each(function () {
115    var video = $(this)[0];
116    if (window.innerWidth >= maxVideoResolution) {
117      video.play();
118    } else {
119      video.pause();
120    }
121  });
122}
123
124// $("#searchtoggle").click(function () {
125//   if ($("#searchtoggle").prop("checked")) {
126//     $(".search-toggle label").addClass("open");
127//     $(".mainNav label").removeClass("open");
128//   } else {
129//     $(".search-toggle label").removeClass("open");
130//   }
131// });
132
133$("#mobiletoggle").click(function () {
134  if ($("#mobiletoggle").prop("checked")) {
135    $(".mobile label").addClass("open");
136  } else {
137    $(".mobile label").removeClass("open");
138  }
139});
140
141$(".mobile-menu ul.main li").click(function () {
142  $(this).toggleClass("open");
143});
144
145// Menu Dropdown
146$(function () {
147  var Accordion = function (el, multiple) {
148    this.el = el || {};
149    // more then one submenu open?
150    this.multiple = multiple || false;
151
152    var dropdownlink = this.el.find(".dropdownlink");
153    dropdownlink.on(
154      "click",
155      { el: this.el, multiple: this.multiple },
156      this.dropdown
157    );
158  };
159
160  Accordion.prototype.dropdown = function (e) {
161    var $el = e.data.el,
162      $this = $(this),
163      //this is the ul.submenuItems
164      $next = $this.next();
165
166    $next.slideToggle();
167    $this.parent().toggleClass("open");
168
169    if (!e.data.multiple) {
170      //show only one menu at the same time
171      $el.find(".submenu").not($next).slideUp().parent().removeClass("open");
172    }
173  };
174
175  var accordion = new Accordion($(".main"), false);
176});
177
178// Use Enter Key for Inputs
179jQuery("input:checkbox").keypress(function (e) {
180  if ((e.keyCode ? e.keyCode : e.which) == 13) {
181    $(this).trigger("click");
182  }
183});
184// Aria Expanded
185jQuery(".bottomLinks, header input:checkbox").bind("click", function () {
186  if ($(this).attr("aria-expanded") == "true") {
187    $(this).attr("aria-expanded", false);
188  } else {
189    $(this).attr("aria-expanded", true);
190  }
191});
192
193//BEGIN: FIXED HEADER ALERT ABOVE HEADER OPTION
194
195var header = jQuery("header");
196
197var headerHeight = header.height();
198
199if (jQuery(".alert").length != 0) {
200  var alert = jQuery("#alertMessage");
201  var alertHeight = alert.height();
202  var alertHeaderHeight = alertHeight + headerHeight;
203  jQuery(".menuMain.is-desktop").css("margin-top", alertHeight + "px");
204  jQuery(window).scroll(function () {
205    if (jQuery(window).scrollTop() == 0) {
206      // var alertHeight1 = jQuery("#alertMessage").height();
207      alert.css("position", "relative");
208      header.css("position", "relative");
209      header.css("top", "0");
210      jQuery(".menuMainDesktop").css("margin-top", "0px");
211      jQuery("body").removeClass("scrollOn");
212      jQuery("body").css("padding-top", "0");
213      // jQuery(".menuSideButtons").css("margin-top", alertHeight1 + "px");
214    } else if (jQuery(window).scrollTop() > 0) {
215      header.css("top", alertHeight + "px");
216      alert.css({ position: "fixed", top: "0" });
217      alert.css("left", "0");
218      header.css("left", "0");
219      header.css("position", "fixed");
220      jQuery("body").addClass("scrollOn");
221      jQuery("body").css("padding-top", alertHeaderHeight + "px");
222      //              header.css("top", alertHeight + "px");
223    }
224  });
225} else {
226  jQuery(window).scroll(function () {
227    if (jQuery(window).scrollTop() == 0) {
228      //            alert.css("position","relative");
229      header.css("position", "relative");
230      jQuery("body").removeClass("scrollOn");
231      jQuery("body").css("padding-top", "0");
232    } else if (jQuery(window).scrollTop() > 0) {
233      header.css("position", "fixed");
234      jQuery("body").addClass("scrollOn");
235      jQuery("body").css("padding-top", headerHeight + "px");
236      header.css("top", "0");
237      header.css("left", "0");
238    }
239  });
240}
241//END: FIXED HEADER ALERT ABOVE HEADER OPTION
242
243//BEGIN: HOME IMPACT SLIDER WITH VIDEO AND IMAGE
244if (jQuery(".slider-main.video-image").length != 0) {
245  jQuery(".slider-main.video-image").slick({
246    slidesToShow: 1,
247    slidesToScroll: 1,
248    accessibility: false,
249    arrows: false,
250    dots: false,
251    fade: false,
252    autoplay: true,
253    speed: 1000,
254    autoplaySpeed: 0,
255    pauseOnHover: false,
256    pauseOnFocus: false,
257    adaptiveHeight: true,
258  });
259  // PLAY AND PAUSE BUTTONS FOR IMAGES
260  jQuery(".playSlide").css("display", "none");
261  jQuery(".pauseSlide").click(function () {
262    jQuery(".slider-main").slick("slickPause");
263    jQuery(".playSlide").css("display", "block");
264    jQuery(".pauseSlide").css("display", "none");
265    jQuery("video").on("ended", function () {
266      jQuery(".slider-main").slick("slickPause");
267    });
268  });
269
270  jQuery(".playSlide").click(function () {
271    jQuery(".slider-main").slick("slickPlay");
272    jQuery(".playSlide").css("display", "none");
273    jQuery(".pauseSlide").css("display", "block");
274    jQuery("video").on("ended", function () {
275      jQuery(".slider-main").slick("slickPlay");
276    });
277  });
278  jQuery(".slider-main").on(
279    "afterChange",
280    function (event, slick, currentSlide) {
281      var vid = $(slick.$slides[currentSlide]).find("video");
282      if (vid.length > 0) {
283        jQuery(".slider-main").slick("slickPause");
284        jQuery(vid).get(0).play();
285      } else {
286        if (currentSlide === 0) {
287          jQuery(".slider-main").slick("setOption", "autoplaySpeed", 0);
288          jQuery(".slider-main").slick("setOption", "speed", 0);
289        } else {
290          jQuery(".slider-main").slick("setOption", "autoplaySpeed", 5000);
291          jQuery(".slider-main").slick("setOption", "speed", 300);
292        }
293      }
294    }
295  );
296  jQuery("video").on("ended", function () {
297    jQuery(".slider-main").slick("slickPlay");
298  });
299}
300//END: HOME IMPACT SLIDER WITH VIDEO AND IMAGE
301
302//BEGIN: HOME IMPACT SLIDER WITH VIDEO
303if (jQuery(".slider-main.video-only").length != 0) {
304  jQuery(".slider-main.video-only").slick({
305    slidesToShow: 1,
306    slidesToScroll: 1,
307    accessibility: false,
308    arrows: true,
309    useCSS: false,
310    pauseOnFocus: false,
311    pauseOnHover: false,
312    fade: false,
313    autoplay: true,
314    autoplaySpeed: 1,
315    speed: 5000,
316    adaptiveHeight: true,
317  });
318  jQuery(".slider-main.video-only").on(
319    "afterChange",
320    function (event, slick, currentSlide) {
321      var vid = $(slick.$slides[currentSlide]).find("video");
322      if (vid.length > 0) {
323        $(".slider-main").slick("slickPause");
324        $(vid).get(0).play();
325      }
326    }
327  );
328  jQuery("video").on("ended", function () {
329    $(".slider-main.video-only").slick("slickPlay");
330  });
331  // PLAY AND PAUSE BUTTONS FOR IMAGES
332  jQuery(".playSlide").css("display", "none");
333  jQuery(".pauseSlide").click(function () {
334    jQuery(".slider-main").slick("slickPause");
335    jQuery(".playSlide").css("display", "block");
336    jQuery(".pauseSlide").css("display", "none");
337  });
338
339  jQuery(".playSlide").click(function () {
340    jQuery(".slider-main").slick("slickPlay");
341    jQuery(".playSlide").css("display", "none");
342    jQuery(".pauseSlide").css("display", "block");
343  });
344}
345//END: HOME IMPACT SLIDER WITH VIDEO
346
347//BEGIN: HOME IMPACT SLIDER WITH IMAGE
348if (jQuery(".slider-main.image-only").length != 0) {
349  jQuery(".slider-main.image-only").slick({
350    slidesToShow: 1,
351    slidesToScroll: 1,
352    accessibility: false,
353    arrows: false,
354    useCSS: false,
355    pauseOnFocus: true,
356    pauseOnHover: true,
357    dots: false,
358    fade: false,
359    autoplay: true,
360    autoplaySpeed: 5000,
361    adaptiveHeight: true,
362  });
363  // PLAY AND PAUSE BUTTONS FOR IMAGES
364  jQuery(".playSlide").css("display", "none");
365  jQuery(".pauseSlide").click(function () {
366    jQuery(".slider-main").slick("slickPause");
367    jQuery(".playSlide").css("display", "block");
368    jQuery(".pauseSlide").css("display", "none");
369  });
370
371  jQuery(".playSlide").click(function () {
372    jQuery(".slider-main").slick("slickPlay");
373    jQuery(".playSlide").css("display", "none");
374    jQuery(".pauseSlide").css("display", "block");
375  });
376}
377//END: HOME IMPACT SLIDER WITH IMAGE
378
379if ($(".featured-slider").length > 0) {
380  $(".slider").slick({
381    slide: ".slide",
382    //centerMode: true,
383    centerPadding: "2em",
384    slidesToShow: 2.5,
385    infinite: false,
386    prevArrow: ".previous.fa.fa-chevron-left",
387    arrows: true,
388    nextArrow: ".next.fa.fa-chevron-right",
389    dots: true,
390    appendDots: ".dots",
391    responsive: [
392      {
393        breakpoint: 720,
394        settings: {
395          slidesToShow: 1,
396        },
397      },
398    ],
399  });
400
401  $(".slide").each(function () {
402    var $slide = $(this);
403    if ($slide.attr("aria-describedby") != undefined) {
404      // ignore extra/cloned slides
405      $(this).attr("id", $slide.attr("aria-describedby"));
406    }
407  });
408}
409
410//BEGIN: HOME INFOGRAPHICS SLIDER
411if (jQuery(".academicsSlider").length != 0) {
412  var $slickElement = $(".asliderContainer");
413  // $slickElement.on('init reInit afterChange', function (event, slick, currentSlide, nextSlide) {
414  // });
415  $slickElement.slick({
416    infinite: true,
417    slidesToShow: 3,
418    slidesToScroll: 1,
419    variableWidth: true,
420    arrows: true,
421    useCSS: false,
422    pauseOnFocus: false,
423    pauseOnHover: false,
424    dots: true,
425    fade: false,
426    draggable: false,
427    autoplay: false,
428    prevArrow:
429      "<button type='button' class='slick-prev'><span class='slideOut'>Prev</span></button>",
430    nextArrow:
431      "<button type='button' class='slick-next'><span class='slideOut'>Next</span></button>",
432    responsive: [
433      {
434        breakpoint: 1300,
435        settings: {
436          slidesToShow: 2,
437          slidesToScroll: 1,
438          variableWidth: false,
439        },
440      },
441      {
442        breakpoint: 1060,
443        settings: {
444          slidesToShow: 1,
445          slidesToScroll: 1,
446          arrows: false,
447          variableWidth: false,
448        },
449      },
450      {
451        breakpoint: 700,
452        settings: {
453          slidesToShow: 1,
454          slidesToScroll: 1,
455          arrows: false,
456          variableWidth: false,
457        },
458      },
459    ],
460  });
461}
462
463jQuery(".infoTog").bind("click", function () {
464  if ($(this).attr("aria-expanded") == "true") {
465    $(this).attr("aria-expanded", false);
466    $(this).removeClass("open");
467  } else {
468    $(this).attr("aria-expanded", true);
469    $(this).addClass("open");
470  }
471});
472
473//END: HOME INFOGRAPHICS SLIDER
474
475// YOUTUBE POPUP MAGNIFIC-POPUP
476
477if (jQuery(".popupYoutube").length > 0) {
478  jQuery(".popupYoutube").magnificPopup({
479    //disableOn: 700,
480    type: "iframe",
481    mainClass: "mfp-fade",
482    removalDelay: 160,
483    preloader: false,
484    fixedContentPos: false,
485  });
486}
487
488//BEGIN: LANDING SLIDER
489if (jQuery(".landing-slider").length != 0) {
490  jQuery(".landing-slider").slick({
491    slidesToShow: 1,
492    slidesToScroll: 1,
493    accessibility: false,
494    arrows: true,
495    useCSS: true,
496    dots: true,
497    fade: true,
498    speed: 2000,
499    autoplay: false,
500    adaptiveHeight: true,
501  });
502}
503//END: LANDING SLIDER
504
505// EVENTS SCROLL ON HOMPAGE
506
507if ($(".vertScroll").length > 0) {
508  const $slider = $(".vertScroll");
509
510  $slider.slick({
511    slide: ".slide",
512    slidesToShow: 2,
513    infinite: false,
514    arrows: false,
515    dots: true,
516    responsive: [
517      {
518        breakpoint: 1060,
519        settings: {
520          slidesToShow: 1,
521        },
522      },
523    ],
524  });
525  $slider.on("wheel", function (e) {
526    e.preventDefault();
527
528    if (e.originalEvent.deltaY < 0) {
529      $(this).slick("slickPrev");
530    } else {
531      $(this).slick("slickNext");
532    }
533  });
534
535  $(".vertScroll .slide").each(function () {
536    var $slide = $(this);
537    $slide.removeAttr("aria-hidden");
538    if ($slide.attr("aria-describedby") != undefined) {
539      // ignore extra/cloned slides
540      $(this).attr("id", $slide.attr("aria-describedby"));
541    }
542  });
543  $(".vertScroll .slick-dots").removeAttr("role");
544  $(".vertScroll .slick-dots, .vertScroll .slick-dots li")
545    .removeAttr("aria-hidden")
546    .removeAttr("aria-controls");
547  $(".vertScroll .dots button").removeAttr("role");
548  $(".vertScroll .slick-track").attr("aria-label", "Programs");
549}
550
551/* BEGIN PROGRAM FILTERING */
552// To keep our code clean and modular, all custom functionality will be contained inside a single object literal called "checkboxFilter".
553
554var checkboxFilter = {
555  // Declare any variables we will need as properties of the object
556
557  $filters: null,
558  // $reset: null,
559  groups: [],
560  outputArray: [],
561  outputString: "",
562
563  // The "init" method will run on document ready and cache any jQuery objects we will need.
564
565  init: function () {
566    var self = this; // As a best practice, in each method we will asign "this" to the variable "self" so that it remains scope-agnostic. We will use it to refer to the parent "checkboxFilter" object so that we can share methods and properties between all parts of the object.
567
568    self.$filters = $(".checkbox-group");
569    // self.$reset = $('#Reset');
570    self.$container = $("#Container");
571
572    self.$filters.find(".filter-section").each(function () {
573      self.groups.push({
574        $inputs: $(this).find("input"),
575        active: [],
576        tracker: false,
577      });
578    });
579
580    self.bindHandlers();
581  },
582
583  // The "bindHandlers" method will listen for whenever a form value changes.
584
585  bindHandlers: function () {
586    var self = this;
587
588    self.$filters.on("change", function () {
589      self.parseFilters();
590    });
591
592    // self.$reset.on('click', function(e){
593    //   e.preventDefault();
594    //   // self.$filters[0].reset();
595    //   self.parseFilters();
596    // });
597  },
598
599  // The parseFilters method checks which filters are active in each group:
600
601  parseFilters: function () {
602    var self = this;
603
604    // loop through each filter group and add active filters to arrays
605
606    for (var i = 0, group; (group = self.groups[i]); i++) {
607      group.active = []; // reset arrays
608      group.$inputs.each(function () {
609        $(this).is(":checked") && group.active.push(this.value);
610      });
611      group.active.length && (group.tracker = 0);
612    }
613
614    self.concatenate();
615  },
616
617  // The "concatenate" method will crawl through each group, concatenating filters as desired:
618
619  concatenate: function () {
620    var self = this,
621      cache = "",
622      crawled = false,
623      checkTrackers = function () {
624        var done = 0;
625
626        for (var i = 0, group; (group = self.groups[i]); i++) {
627          group.tracker === false && done++;
628        }
629
630        return done < self.groups.length;
631      },
632      crawl = function () {
633        for (var i = 0, group; (group = self.groups[i]); i++) {
634          group.active[group.tracker] && (cache += group.active[group.tracker]);
635
636          if (i === self.groups.length - 1) {
637            self.outputArray.push(cache);
638            cache = "";
639            updateTrackers();
640          }
641        }
642      },
643      updateTrackers = function () {
644        for (var i = self.groups.length - 1; i > -1; i--) {
645          var group = self.groups[i];
646
647          if (group.active[group.tracker + 1]) {
648            group.tracker++;
649            break;
650          } else if (i > 0) {
651            group.tracker && (group.tracker = 0);
652          } else {
653            crawled = true;
654          }
655        }
656      };
657
658    self.outputArray = []; // reset output array
659
660    do {
661      crawl();
662    } while (!crawled && checkTrackers());
663
664    self.outputString = self.outputArray.join();
665
666    // If the output string is empty, show all rather than none:
667
668    !self.outputString.length && (self.outputString = "all");
669
670    //console.log(self.outputString);
671
672    // ^ we can check the console here to take a look at the filter string that is produced
673
674    // Send the output string to MixItUp via the 'filter' method:
675
676    // if(self.$container.mixItUp('isLoaded')){
677    //   self.$container.mixItUp('filter', self.outputString);
678    // }
679  },
680};
681
682// On document ready, initialise our code.
683
684$(function () {
685  // Initialize checkboxFilter code
686
687  checkboxFilter.init();
688
689  // Instantiate MixItUp
690});
691
692/* END PROGRAM FILTERING */
693
694$(function () {
695  // BEGIN: VIDEO DEFER
696  if ($("video.defer").length > 0) {
697    _DeferredScripts.push({
698      //object properties here:
699      priority: 1,
700      thirdParty: 0,
701      callback: function () {
702        $(window).bind("resize", function () {
703          initDeferredVideos();
704        });
705        initDeferredVideos();
706      },
707    });
708  }
709  // END: VIDEO DEFER
710});
711
712function custInterval(func, wait, times) {
713  var interv = (function (w, t) {
714    return function () {
715      if (typeof t === "undefined" || t-- > 0) {
716        setTimeout(interv, w);
717        try {
718          func.call(null);
719        } catch (e) {
720          t = 0;
721          throw e.toString();
722        }
723      }
724    };
725  })(wait, times);
726  setTimeout(interv, wait);
727}
728
729// Include these at the end  of the main scripts file:
730function downloadJSAtOnload() {
731  // call function now
732  getDeferredScripts();
733  // create function interval
734  custInterval(getDeferredScripts, 5000, 10);
735}
736
737function getDeferredScripts() {
738  // if _DeferredScripts is an object and has items
739  if (typeof _DeferredScripts == "object" && _DeferredScripts.length > 0) {
740    // Sort
741    _DeferredScripts.sort(function (a, b) {
742      try {
743        // if they have the same priority
744        if (a.priority == b.priority) {
745          return a.thirdParty - b.thirdParty;
746        } else {
747          //priority is different so third party doesn't matter
748          return a.priority - b.priority;
749        }
750      } catch (e) {
751        return 1;
752      }
753    });
754    while (_DeferredScripts.length > 0) {
755      // remove the first item in _DeferredScripts and return that item
756      var scriptObj = _DeferredScripts.shift();
757
758      // if returned object has a callback function
759      // else if it has a url
760      if (typeof scriptObj.callback == "function") {
761        scriptObj.callback();
762      } else if (typeof scriptObj.url == "string") {
763        var element = document.createElement("script");
764        element.src = scriptObj.url;
765        document.body.appendChild(element);
766      }
767    }
768  }
769}
770
771if (window.addEventListener)
772  window.addEventListener("load", downloadJSAtOnload, false);
773else if (window.attachEvent) window.attachEvent("onload", downloadJSAtOnload);
774else window.onload = downloadJSAtOnload;
775
776// Swiper
777if (jQuery(".swiper").length != 0) {
778  console.log("swiper");
779  new Swiper(".swiper", {
780    autoHeight: true,
781    pagination: {
782      el: ".swiper-pagination",
783    },
784    navigation: {
785      nextEl: ".swiper-button-next",
786      prevEl: ".swiper-button-prev",
787    },
788  });
789}
790// MNTN 
791function mntnConversion(){
792  return (function(){var x=null,p,q,m,
793    o="37553",
794    l="ORDER ID",
795    i="TOTAL ORDER AMOUNT",
796    c="",
797    k="",
798    g="",
799    j="",
800    u="",
801    shadditional="";
802    try{p=top.document.referer!==""?encodeURIComponent(top.document.referrer.substring(0,512)):""}catch(n){p=document.referrer!==null?document.referrer.toString().substring(0,512):""}try{q=window&&window.top&&document.location&&window.top.location===document.location?document.location:window&&window.top&&window.top.location&&""!==window.top.location?window.top.location:document.location}catch(b){q=document.location}try{m=parent.location.href!==""?encodeURIComponent(parent.location.href.toString().substring(0,512)):""}catch(z){try{m=q!==null?encodeURIComponent(q.toString().substring(0,512)):""}catch(h){m=""}}var A,y=document.createElement("script"),w=null,v=document.getElementsByTagName("script"),t=Number(v.length)-1,r=document.getElementsByTagName("script")[t];if(typeof A==="undefined"){A=Math.floor(Math.random()*100000000000000000)}w="dx.mountain.com/spx?conv=1&shaid="+o+"&tdr="+p+"&plh="+m+"&cb="+A+"&shoid="+l+"&shoamt="+i+"&shocur="+c+"&shopid="+k+"&shoq="+g+"&shoup="+j+"&shpil="+u+shadditional;y.type="text/javascript";y.src=("https:"===document.location.protocol?"https://":"http://")+w;r.parentNode.insertBefore(y,r)}());
803}

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.