PageSourceSearch

https://www.ifaxapp.com/wp-content/themes/jumpstart-child/assets/js/custom.js?v=7.30.5

js ifaxapp.com collected 2026-09-24 09:38:51 UTC 37,914 bytes, 898 lines download raw bytes

1function equalHeights() {
2  jQuery.fn.extend({
3    equalHeight: function () {
4      var top = 0;
5      var row = [];
6      var classname = ('equalHeight' + Math.random()).replace('.', '');
7      jQuery(this).each(function () {
8        var thistop = jQuery(this).offset().top;
9        if (thistop > top) {
10          jQuery('.' + classname).removeClass(classname);
11          top = thistop;
12        }
13        jQuery(this).addClass(classname);
14        jQuery(this).height('auto');
15        var h = (Math.max.apply(null, jQuery('.' + classname).map(function () {
16          return jQuery(this).outerHeight();
17        }).get()));
18        jQuery('.' + classname).height(h);
19      }).removeClass(classname);
20    }
21  });
22  jQuery('.new-pricing-grid .subtext').equalHeight();
23
24}
25
26jQuery(document).ready(function () {
27 equalHeights();
28  if (window.location.href.includes('compare-ifax')) {
29    setTimeout(function () {
30      var n = document.querySelector(".compare-ifax-table-scroll");
31      /*console.log(n);*/
32      n.addEventListener("scroll", function (t) {
33        console.log('scroll: ' + t.target.scrollLeft)
34        if (t.target.scrollLeft > 0) {
35          jQuery(".comparetablemain").addClass("table_scrolled")
36        } else {
37          jQuery(".comparetablemain").removeClass("table_scrolled")
38        }
39      })
40    }, 3000)
41  }
42
43  // if (window.location.href.includes('contact-sales')) {
44
45  //   hbspt.forms.create({
46  //     portalId: "6530257",
47  //     formId: "5648823f-6546-41a7-b012-1c19f59e997e",
48  //     target: "body .hubspot_iframe",
49  //     onFormReady: ($form) => {
50  //       $form.find('#phone_ext-5648823f-6546-41a7-b012-1c19f59e997e').css('cssText', 'width: 120px !important');
51  //       $form.find('#phone_ext-5648823f-6546-41a7-b012-1c19f59e997e').css({ 'min-width': '120px' });
52
53  //       $form.find('#phone-5648823f-6546-41a7-b012-1c19f59e997e').css({ 'min-width': 'calc(100% - 127px)', 'max-width': 'calc(100% - 127px)', 'padding': '5px' });
54
55  //       $form.find('div.input').css({ 'margin-right': '0px'});
56
57        
58
59  //       var ss = jsGetCookie('trackFeature');
60  //       if (ss != '') {
61  //         $form.find('input[name="product_category"]').val(ss).change();
62  //       } else {
63  //         $form.find('input[name="product_category"]').val('App').change();
64  //       }
65  //       // console.log("full width", window.innerWidth);
66  //       if (window.innerWidth < 481) {
67  //         // console.log("mobile", )
68  //         $form.find('.actions').css({ 'margin-top': '30px'});
69  //       } else {
70  //         $form.find('.actions').css({ 'margin-top': '0px', 'padding-top': '10px'});
71  //       }
72        
73
74  //     },
75  //     onFormSubmit: ($form) => {
76  //       let email = $form.find('input[name="email"]').val();
77  //       let firstname = $form.find('input[name="firstname"]').val();
78  //       let lastname = $form.find('input[name="lastname"]').val();
79  //       let mobile = $form.find('input[name="phone"]').val();
80  //       let company = $form.find('input[name="company"]').val();
81  //       let pages = $form.find('select[name="monthly_page_ranges"]').val();
82        
83
84  //       // window.hj('identify', null, {
85  //       //   'Hubspot Email': email,
86  //       // });
87
88  //       jsSetCookie('_hubspot_email', email);
89  //       jsSetCookie('_hubspot_firstname', firstname);
90  //       jsSetCookie('_hubspot_lastname', lastname);
91  //       jsSetCookie('_hubspot_mobile', mobile);
92  //       jsSetCookie('_hubspot_company', company);
93  //       jsSetCookie('_hubspot_pages', pages);
94  //       // window.goal_set_track('/get-quote-website');
95  //     },
96  //     onFormSubmitted: ($form) => {
97        
98  //       let dataInstanceId = $form.attr('data-instance-id');
99  //       console.log('_hubspot_pages', jsGetCookie('_hubspot_pages'));
100  //       if (jsGetCookie('_hubspot_pages') == 'Less than 1,000') {
101  //         window.location.href = "https://web.ifaxapp.com/message-sales";
102  //       } else {
103  //         window.location.href = "https://web.ifaxapp.com/schedule-meeting?submissionGuid=" + dataInstanceId;
104  //       }
105
106  //     },
107  //   });
108
109  // }
110
111
112  // if (window.location.href.includes('/partners/contact')) {
113
114  //   hbspt.forms.create({
115  //     portalId: "6530257",
116  //     formId: "33c7983d-d52c-4366-99de-fa3f131015c6",
117  //     target: "body .hubspot_iframe",
118  //     onFormReady: ($form) => {
119
120  //       $form.find('#phone_ext-33c7983d-d52c-4366-99de-fa3f131015c6').css('cssText', 'width: 120px !important');
121  //       $form.find('#phone_ext-33c7983d-d52c-4366-99de-fa3f131015c6').css({ 'min-width': '120px' });
122
123  //       $form.find('#phone-33c7983d-d52c-4366-99de-fa3f131015c6').css({ 'min-width': 'calc(100% - 127px)', 'max-width': 'calc(100% - 127px)', 'padding': '5px' });
124  //       $form.find('#notes-text').css({ 'position': 'absolute', 'bottom': '10px' });
125  //       // if (this._guestservice.getCookie('_fprom_code') != undefined && this._guestservice.getCookie('_fprom_code')) {
126  //       //   let name = this._guestservice.getCookie('_fprom_code').split('_r_');
127  //       //   this._api.firstpromoter(name[1]).subscribe((res) => {
128
129  //       //     $form.find('input[name="promoter"]').val(res.email).change();
130  //       //   })
131  //       // }
132  //     },
133  //     onFormSubmitted: ($form) => {
134  //       let email = $form.find('input[name="email"]').val();
135  //       let firstname = $form.find('input[name="firstname"]').val();
136  //       let lastname = $form.find('input[name="lastname"]').val();
137  //       let mobile = $form.find('input[name="phone"]').val();
138  //       let company = $form.find('input[name="company"]').val();
139  //       jsSetCookie('_hubspot_email', email);
140  //       jsSetCookie('_hubspot_firstname', firstname);
141  //       jsSetCookie('_hubspot_lastname', lastname);
142  //       jsSetCookie('_hubspot_mobile', mobile);
143  //       jsSetCookie('_hubspot_company', company);
144
145  //     },
146  //   });
147
148  // }
149
150
151  // if (window.location.href.includes('ifax-enterprise')) {
152
153  //   hbspt.forms.create({
154  //     portalId: "6530257",
155  //     formId: "5648823f-6546-41a7-b012-1c19f59e997e",
156  //     target: "body .hubspot_iframe",
157  //     translations: {
158  //       en: {
159  //         submitText: "REQUEST A QUOTE",
160  //       }
161  //     },
162  //     onFormReady: ($form) => {
163  //       $form.find('#phone_ext-5648823f-6546-41a7-b012-1c19f59e997e').css('cssText', 'width:120px!important');
164  //       $form.find('#phone_ext-5648823f-6546-41a7-b012-1c19f59e997e').css({ 'min-width': '120px', 'border': '0 none', 'border-radius': '0px', 'padding': '0 10px', 'height': '28px' });
165
166  //       $form.find('#phone-5648823f-6546-41a7-b012-1c19f59e997e').css({ 'min-width': 'calc(100% - 130px)', 'max-width': 'calc(100% - 130px)', 'padding': '0 5px', 'border': '0 none', 'border-radius': '0px', 'padding-left': '15px', 'margin-left': '10px', 'height': '28px', 'border-left': '2px solid #cbd6e2' });
167  //       $form.find('.hs_phone.hs-phone.hs-fieldtype-phonenumber.field.hs-form-field').css({ 'width': '100%' });
168
169  //       $form.find('.form-columns-2 .hs-form-field').css({ 'width': '100%' });
170
171  //       $form.find('input.hs-input').css({ 'width': '100%' });
172
173  //       $form.find('.actions').css({ 'margin-top': '0px', 'margin-bottom': '0px', 'padding-top': '10px' });
174  //       $form.find('.hs-button').css({ 'width': '100%' });
175
176  //       $form.find('div.input').css({ 'margin-right': '0px' });
177  //       $form.find('#phone_ext-5648823f-6546-41a7-b012-1c19f59e997e').parent('.hs-input').parent('.input').css({ 'background-color': '#f5f8fa', 'border': '1px solid #cbd6e2', 'border-radius': '3px', 'padding': '5px 0' });
178
179  //       var ss = jsGetCookie('trackFeature');
180  //       if (ss != '') {
181  //         $form.find('input[name="product_category"]').val(ss).change();
182  //       } else {
183  //         $form.find('input[name="product_category"]').val('App').change();
184  //       }
185  //       console.log(window.innerWidth);
186  //       if (window.innerWidth < 768) {
187  //         $form.find('.form-columns-2 .hs_firstname.hs-form-field').css({ 'width': '100%', 'padding-right': '0px' });
188  //         $form.find('.form-columns-2 .hs_lastname.hs-form-field').css({ 'width': '100%', 'padding-left': '0px' });
189  //       } else {
190  //         $form.find('.form-columns-2 .hs_firstname.hs-form-field').css({ 'width': '50%', 'padding-right': '7px' });
191  //         $form.find('.form-columns-2 .hs_lastname.hs-form-field').css({ 'width': '50%', 'padding-left': '7px' });
192  //       }
193  //     },
194  //     onFormSubmit: ($form) => {
195  //       let email = $form.find('input[name="email"]').val();
196  //       let firstname = $form.find('input[name="firstname"]').val();
197  //       let lastname = $form.find('input[name="lastname"]').val();
198  //       let mobile = $form.find('input[name="phone"]').val();
199  //       let company = $form.find('input[name="company"]').val();
200  //       let pages = $form.find('select[name="monthly_page_ranges"]').val();
201  //       // window.hj('identify', null, {
202  //       //   'Hubspot Email': email,
203  //       // });
204
205  //       jsSetCookie('_hubspot_email', email);
206  //       jsSetCookie('_hubspot_firstname', firstname);
207  //       jsSetCookie('_hubspot_lastname', lastname);
208  //       jsSetCookie('_hubspot_mobile', mobile);
209  //       jsSetCookie('_hubspot_company', company);
210  //       jsSetCookie('_hubspot_pages', pages);
211  //       // window.goal_set_track('/get-quote-website');
212  //     },
213  //     onFormSubmitted: ($form) => {
214  //       let dataInstanceId = $form.attr('data-instance-id');
215  //       console.log('_hubspot_pages', jsGetCookie('_hubspot_pages'));
216  //       if (jsGetCookie('_hubspot_pages') == 'Less than 1,000') {
217  //         window.location.href = "https://web.ifaxapp.com/message-sales";
218  //       } else {
219  //         window.location.href = "https://web.ifaxapp.com/schedule-meeting?submissionGuid=" + dataInstanceId;
220  //       }
221
222  //     },
223  //   });
224
225  // }
226
227  // if (window.location.href.includes('faxing-api')) {
228
229  //   hbspt.forms.create({
230  //     portalId: "6530257",
231  //     formId: "5648823f-6546-41a7-b012-1c19f59e997e",
232  //     target: "body .hubspot_iframe",
233  //     translations: {
234  //       en: {
235  //         submitText: "REQUEST A QUOTE",
236  //       }
237  //     },
238  //     onFormReady: ($form) => {
239  //       $form.find('#phone_ext-5648823f-6546-41a7-b012-1c19f59e997e').css('cssText', 'width:120px!important');
240  //       $form.find('#phone_ext-5648823f-6546-41a7-b012-1c19f59e997e').css({ 'min-width': '120px', 'border': '0 none', 'border-radius': '0px', 'padding': '0 10px', 'height': '28px' });
241
242  //       $form.find('#phone-5648823f-6546-41a7-b012-1c19f59e997e').css({ 'min-width': 'calc(100% - 130px)', 'max-width': 'calc(100% - 130px)', 'padding': '0 5px', 'border': '0 none', 'border-radius': '0px', 'padding-left': '15px', 'margin-left': '10px', 'height': '28px', 'border-left': '2px solid #cbd6e2' });
243  //       $form.find('.hs_phone.hs-phone.hs-fieldtype-phonenumber.field.hs-form-field').css({ 'width': '100%' });
244
245  //       $form.find('.form-columns-2 .hs-form-field').css({ 'width': '100%' });
246
247  //       $form.find('input.hs-input').css({ 'width': '100%' });
248
249  //       $form.find('.actions').css({ 'margin-top': '0px', 'margin-bottom': '0px', 'padding-top': '10px' });
250  //       $form.find('.hs-button').css({ 'width': '100%' });
251
252  //       $form.find('div.input').css({ 'margin-right': '0px' });
253  //       $form.find('#phone_ext-5648823f-6546-41a7-b012-1c19f59e997e').parent('.hs-input').parent('.input').css({ 'background-color': '#f5f8fa', 'border': '1px solid #cbd6e2', 'border-radius': '3px', 'padding': '5px 0' });
254
255  //       var ss = jsGetCookie('trackFeature');
256  //       if (ss != '') {
257  //         $form.find('input[name="product_category"]').val(ss).change();
258  //       } else {
259  //         $form.find('input[name="product_category"]').val('App').change();
260  //       }
261  //       console.log(window.innerWidth);
262  //       if (window.innerWidth < 768) {
263  //         $form.find('.form-columns-2 .hs_firstname.hs-form-field').css({ 'width': '100%', 'padding-right': '0px' });
264  //         $form.find('.form-columns-2 .hs_lastname.hs-form-field').css({ 'width': '100%', 'padding-left': '0px' });
265  //       } else {
266  //         $form.find('.form-columns-2 .hs_firstname.hs-form-field').css({ 'width': '50%', 'padding-right': '7px' });
267  //         $form.find('.form-columns-2 .hs_lastname.hs-form-field').css({ 'width': '50%', 'padding-left': '7px' });
268  //       }
269  //     },
270  //     onFormSubmit: ($form) => {
271  //       let email = $form.find('input[name="email"]').val();
272  //       let firstname = $form.find('input[name="firstname"]').val();
273  //       let lastname = $form.find('input[name="lastname"]').val();
274  //       let mobile = $form.find('input[name="phone"]').val();
275  //       let company = $form.find('input[name="company"]').val();
276  //       let pages = $form.find('select[name="monthly_page_ranges"]').val();
277  //       // window.hj('identify', null, {
278  //       //   'Hubspot Email': email,
279  //       // });
280
281  //       jsSetCookie('_hubspot_email', email);
282  //       jsSetCookie('_hubspot_firstname', firstname);
283  //       jsSetCookie('_hubspot_lastname', lastname);
284  //       jsSetCookie('_hubspot_mobile', mobile);
285  //       jsSetCookie('_hubspot_company', company);
286  //       jsSetCookie('_hubspot_pages', pages);
287  //       // window.goal_set_track('/get-quote-website');
288  //     },
289  //     onFormSubmitted: ($form) => {
290  //       let dataInstanceId = $form.attr('data-instance-id');
291  //       console.log('_hubspot_pages', jsGetCookie('_hubspot_pages'));
292  //       if (jsGetCookie('_hubspot_pages') == 'Less than 1,000') {
293  //         window.location.href = "https://web.ifaxapp.com/message-sales";
294  //       } else {
295  //         window.location.href = "https://web.ifaxapp.com/schedule-meeting?submissionGuid=" + dataInstanceId;
296  //       }
297
298  //     },
299  //   });
300
301  // }
302
303  if (window.location.href.includes('ifax-vs-efax')) {
304
305    hbspt.forms.create({
306      portalId: "6530257",
307      formId: "48e6bb02-07cf-46e8-97c4-3f135131dc13",
308      target: "body .calculate_iframe",
309      onFormReady: ($form) => {
310        $form.find('.container').css({ 'margin-top': '0px' });
311
312      },
313      onFormSubmitted: ($form) => {
314
315      },
316    });
317
318  }
319
320  if (window.location.href.includes('traditional-fax-vs-online-faxing-costs')) {
321
322    hbspt.forms.create({
323      portalId: "6530257",
324      formId: "4e84c767-319d-42d6-b5c1-9402b6c53b69",
325      target: "body .calculate_iframe",
326      onFormReady: ($form) => {
327        $form.find('.container').css({ 'margin-top': '0px' });
328
329      },
330      onFormSubmitted: ($form) => {
331
332      },
333    });
334
335  }
336
337  // Start (Pricing Page Toggle Class) //
338  jQuery(".contectbtn .contect_btn").click(function () {
339    jQuery(this).toggleClass("show");
340    jQuery(this).parents(".price_plan_scroll_sec").toggleClass("show_content");
341  });
342  // End (Pricing Page Toggle Class) //    
343
344  // target="_self" add in Footer Links
345  jQuery("footer.footer-1 li.menu-item a[aria-current='page']").attr("target", "_self");
346
347  setTimeout(function () {
348    jQuery('#BannerAnimationDiv').addClass('show');
349    jQuery('#BannerGradientText').addClass('banner_gradient_animation');
350  }, 1500);
351
352  setTimeout(function () {
353    if (window.innerWidth < 768) {
354      const video = document.querySelector('video');
355      if (video) {
356        video.removeAttribute('controls');
357      }
358    }
359  }, 1000);
360
361  jQuery("div#ez-toc-container.counter-hierarchy.ez-toc-counter.ez-toc-custom.ez-toc-container-direction li a, .Blog_Right_Siticky_div #ez-toc-container li a").each(function () {
362    jQuery(this).html(jQuery(this).html().replace(/&nbsp;/g, ''));
363  });
364
365// -------------------------------------- new pricing js start -------------------------------------- 
366  // jQuery('ul.new-pricing-tabs li').click(function () {
367  //   var tab_id = jQuery(this).attr('data-tab');
368  //   jQuery('ul.new-pricing-tabs li').removeClass('current');
369  //   jQuery('.new-pricing-tab-content').removeClass('current');
370  //   jQuery(this).addClass('current');
371  //   jQuery("#" + tab_id).addClass('current');
372  //   var section = jQuery('.new-pricing-section');
373  //   section.removeClass(function (index, className) {
374  //     return (className.match(/(^|\s)new-pricing-tab-\S+/g) || []).join(' ');
375  //   });
376  //   section.addClass(tab_id);
377  // });
378
379  jQuery('ul.new-pricing-tabs li').click(function () {
380    var tab_id = jQuery(this).attr('data-tab');
381    
382    // Remove active classes
383    jQuery('ul.new-pricing-tabs li').removeClass('current');
384    jQuery('.new-pricing-tab-content').removeClass('current');
385    
386    // Add active class to clicked tab and corresponding content
387    jQuery(this).addClass('current');
388    jQuery("#" + tab_id).addClass('current');
389    
390    // Update pricing section classes
391    var section = jQuery('.new-pricing-section');
392    section.removeClass(function (index, className) {
393        return (className.match(/(^|\s)new-pricing-tab-\S+/g) || []).join(' ');
394    });
395    section.addClass(tab_id);
396    
397    // Update URL with tab identifier (using hash)
398    if (history.pushState) {
399        // Use pushState to change URL without reload
400        history.pushState(null, null, '#' + tab_id);
401    } else {
402        // Fallback for older browsers
403        window.location.hash = '#' + tab_id;
404    }
405});
406
407  jQuery(document).ready(function() {
408    if (window.location.hash) {
409        var hash = window.location.hash.substring(3); // Remove the #
410        console.log(hash)
411        var tabElement = jQuery('ul.new-pricing-tabs li[data-tab="' + hash + '"]');
412        if (tabElement.length) {
413            tabElement.click(); // Trigger click on the tab
414        }
415    }
416});
417
418  // -------- range slider js start --------
419var sheet = document.createElement('style');
420var $rangeInput = jQuery('.range input');
421var prefs = ['webkit-slider-runnable-track', 'moz-range-track', 'ms-track'];
422document.body.appendChild(sheet);
423
424// var getTrackStyle = function (el) {
425//   var curVal = parseInt(el.value, 10);
426//   var min = parseInt(el.min || 1, 10);
427//   var max = parseInt(el.max || 8, 10);
428//   var steps = max - min;
429//   var val = ((curVal - min) / steps) * 100;
430
431//   var style = '';
432//   jQuery('.range-labels li').removeClass('active selected');
433//   var curLabel = jQuery('.range-labels').find('li:nth-child(' + curVal + ')');
434//   curLabel.addClass('active selected');
435//   curLabel.prevAll().addClass('selected');
436
437//   for (var i = 0; i < prefs.length; i++) {
438//     style += '.range input::-' + prefs[i] + ' {';
439//     style += 'background: linear-gradient(to right, #A0EAFF 0%, #5C9DFF ' + val + '%, #9292922B ' + val + '%, #9292922B 100%);';
440//     style += '}';
441//   }
442
443//   return style;
444// };
445
446// // Apply on slider interaction
447// $rangeInput.on('input', function () {
448//   equalHeights();
449//   sheet.textContent = getTrackStyle(this);
450// });
451
452// // Trigger once on load
453// $rangeInput.each(function () {
454//   equalHeights();
455//   sheet.textContent = getTrackStyle(this);
456// });
457
458
459  // toggle button js start
460  jQuery('.toggle-switch').on('change', function () {
461    jQuery('.billing-toggle').toggleClass('monthly-active');
462  });
463
464
465// -------------------------------------- new pricing js end -------------------------------------- 
466
467// Get the height of the amplify-top-banner and set it as the top value of the mobile header
468var bannerHeight = jQuery('.amplify-top-banner').outerHeight(true); // includes padding + margin
469jQuery('header.top_header.mobile_header').css('top', bannerHeight + 'px');
470
471jQuery('.amplify-top-banner').length && jQuery('header.top_header.mobile_header').css('top', jQuery('.amplify-top-banner').outerHeight(true) + 'px');
472});
473
474document.querySelectorAll("#ez-toc-container ul").forEach(ul => {
475  const hasCustomMarker = Array.from(ul.children).some(li => {
476    const markerStyle = window.getComputedStyle(li, '::marker');
477    // Check if the content of the marker is non-default (optional condition)
478    return markerStyle.content !== 'none';
479  });
480
481  if (hasCustomMarker) {
482    jQuery('#ez-toc-container ul').addClass('PaddingLeft20');
483  }
484});
485
486function jsSetCookie(cname, cvalue, exdays) {
487  const d = new Date();
488  d.setTime(d.getTime() + (exdays*24*60*60*1000));
489  let expires = "expires="+ d.toUTCString();
490  document.cookie = cname + "=" + cvalue + ";" + expires + ";domain=.ifaxapp.com;path=/";
491  if(cname == "g_state"){
492    document.cookie = cname + "=" + cvalue + ";" + expires + ";domain=www.ifaxapp.com;path=/";
493  }  
494  // const d = new Date();
495  // d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
496  // let expires = "expires=" + d.toUTCString();
497  // document.cookie = cname + "=" + cvalue + ";" + expires + ";domain=.ifaxapp.com;path=/";
498}
499function jsGetCookie(cname) {
500  let name = cname + "=";
501  let decodedCookie = decodeURIComponent(document.cookie);
502  let ca = decodedCookie.split(';');
503  for (let i = 0; i < ca.length; i++) {
504    let c = ca[i];
505    while (c.charAt(0) == ' ') {
506      c = c.substring(1);
507    }
508    if (c.indexOf(name) == 0) {
509      return c.substring(name.length, c.length);
510    }
511  }
512  return "";
513}
514
515function getPageFromOS(os) {
516  var arr = [];
517  arr['Android'] = '/fax-from-android';
518  arr['iOS'] = '/fax-from-iphone-ipad';
519  arr['Windows'] = '/fax-from-pc';
520
521  return arr[os];
522
523}
524
525
526// device detection
527if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)
528  || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|
528sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0, 4))) {
529
530
531  var isMobile = {
532    Android: function () {
533      if (navigator.userAgent.match(/Android/i)) {
534        return 'Android';
535      }
536    },
537    BlackBerry: function () {
538      if (navigator.userAgent.match(/BlackBerry/i)) {
539        return 'BlackBerry';
540      }
541    },
542    iOS: function () {
543      if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {
544        return 'iOS';
545      }
546    },
547    Opera: function () {
548      if (navigator.userAgent.match(/Opera Mini/i)) {
549        return 'Opera';
550      }
551    },
552    Windows: function () {
553      if (navigator.userAgent.match(/IEMobile/i)) {
554        return 'Windows';
555      }
556    },
557    any: function () {
558      return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
559    }
560  };
561
562  // if(window.location.href.includes('.com/fax-from-android')){
563
564  //     if(isMobile.any() == "Android" && window.location.href.includes('.com/fax-from-android') == false){
565  //        window.location.href = getPageFromOS(isMobile.any());
566  //     }
567  //     // else if(isMobile.any() == "iOS" && window.location.href.includes('/fax-from-iphone-ipad') == false){
568  //     //    window.location.href = getPageFromOS(isMobile.any());
569  //     // }else if(isMobile.any() == "Windows" && window.location.href.includes('/fax-from-windows') == false){
570  //     //    window.location.href = getPageFromOS(isMobile.any());
571  //     // }
572  // }  
573
574  if (window.location.href.includes('/mobile-fax-app/')) {
575    console.log('os', isMobile.any());
576    if (isMobile.any() == "Android") {
577      jQuery('.DownloadiFaxLink').attr('href', 'https://play.google.com/store/apps/details?id=crowdedroad.iFax&referrer=utm_source%3Dwebsite');
578      jQuery('.DownloadiFaxLink').text('Download iFax for Android');
579      jQuery('.app_part').hide();
580    } else if (isMobile.any() == "iOS") {
581      jQuery('.DownloadiFaxLink').attr('href', 'https://itunes.apple.com/app/apple-store/id331514859?pt=49076&ct=website&mt=8');
582      jQuery('.DownloadiFaxLink').text('Download iFax for iOS');
583      jQuery('.app_part').hide();
584    }
585  }
586
587  // // auto redirection single time for new users
588
589  // if(jsGetCookie('newUser') != '1'){
590  //   jsSetCookie('newUser','1')
591  //   if(isMobile.any() == "Android"){
592  //     window.open("https://play.google.com/store/apps/details?id=crowdedroad.iFax");
593  //   }else if(isMobile.any() == "iOS"){
594  //     window.open("https://apps.apple.com/us/app/ifax-app-send-fax-from-iphone/id331514859");
595  //   }  
596  // }
597
598
599}
600
601
602
603if (window.location.href.includes('/free-fax-trial')) {
604  jQuery(document).ready(function () {
605    jQuery(document).on('click', '.menu_bar .navRoot li a.landing_page_link, button.box_send_fax_btn.diagonal_btn.send_fax_blue a.link_to_price_sec, a.getfreetrailbtn,.getfreetrailbtn a.elementor-button, .got_to_price_sec a.elementor-button-link', function (event) {
606      event.preventDefault();
607      jQuery('html, body').animate({
608        scrollTop: jQuery("#pricing").offset().top - 60
609      }, 2000);
610    })
611  });
612}
613
614jQuery('.fax_xyz_button').find('a').attr('target', '_self');
615
616jQuery('.SendFreeFax').click(function () {
617  window.location.href = 'https://web.fax.xyz/new-fax?utm_source=iFax&utm_medium=free-fax-lp';
618})
619jQuery('.SendFreeFaxFromPayPerFax').click(function () {
620  window.location.href = 'https://web.fax.xyz/new-fax?utm_source=iFax&utm_medium=pay-per-fax-lp';
621})
622jQuery('.SendFreeFaxFromTempate').click(function () {
623  window.location.href = 'https://web.fax.xyz/new-fax?utm_source=iFax&utm_medium=free-fax-cover-sheets';
624})
625jQuery('body .SendFreeFaxFromFaxNumber').click(function () {
626  window.location.href = 'https://web.fax.xyz/new-fax?utm_source=iFax&utm_medium=free-fax-number-lp';
627})
628
629jQuery('body .freefaxnumberwebfax').click(function () {
630  window.location.href = 'https://web.fax.xyz/fax-number?utm_source=iFax&utm_medium=free-fax-number-lp';
631})
632
633jQuery('body .a_b_testing').click(function () {
634  
635  if (jsGetCookie('a_b_testing') == '1') {
636    window.location.href = 'https://www.ifaxapp.com/signup/?plan=pro&bill=12&paid=0';
637  } else {
638    window.location.href = 'https://www.ifaxapp.com/pricing/';
639  }
640})
641
642
643
644jQuery('body .scrolltosamepage').click(function(event){
645    event.preventDefault();
646    var targettoscroll = jQuery(this).attr('href');
647    jQuery('html, body').animate({
648      scrollTop: jQuery(targettoscroll).offset().top - 60
649    }, 500);
650});
651
652jQuery('.faxapi_tab_main.send_faxes .nav-item .nav-link').removeAttr('href');
653jQuery('.faxapi_tab_main.retrive_faxes .nav-item .nav-link').removeAttr('href');
654jQuery('.faxapi_tab_main.retrive_faxes .nav-item').click(function () {
655  var attr = jQuery(this).find('a').attr('aria-controls');
656  jQuery('.retrive_faxes .tab-content .tab-pane').removeClass('active');
657  jQuery('.retrive_faxes .tab-content').find('#' + attr).addClass('active');
658})
659jQuery('.faxapi_tab_main.send_faxes .nav-item').click(function () {
660  var attr = jQuery(this).find('a').attr('aria-controls');
661  jQuery('.send_faxes .tab-content .tab-pane').removeClass('active');
662  jQuery('.send_faxes .tab-content').find('#' + attr).addClass('active');
663})
664
665// header arrow center new js 8-8-25 start
666document.addEventListener('DOMContentLoaded', function () {
667  if (window.innerWidth > 1024) {
668 const menuLinks = document.querySelectorAll('.menu_bar .rootLink:not(.no-after)');
669const indicator = document.querySelector('.new_active_arrow');
670const menuBar = document.querySelector('.menu_bar');
671
672let firstTimeShown = false;
673
674menuLinks.forEach(link => {
675  link.addEventListener('mouseenter', () => {
676    const linkRect = link.getBoundingClientRect();
677    const menuRect = menuBar.getBoundingClientRect();
678
679    const linkCenter = linkRect.left + linkRect.width / 2;
680    const relativeLeft = linkCenter - menuRect.left - 8; // center the arrow (16px / 2)
681
682    if (!firstTimeShown) {
683      // Remove transition temporarily
684      indicator.style.transition = 'none';
685
686      // Position it immediately and hide it
687      indicator.style.left = `${relativeLeft}px`;
688      indicator.style.opacity = '0';
689
690      // Delay for 2ms to force layout paint before showing
691      setTimeout(() => {
692        // Now enable transition and show
693        indicator.style.transition = 'left 0.25s ease, opacity 0.25s ease';
694        indicator.style.opacity = '1';
695        firstTimeShown = true;
696      }, 2);
697    } else {
698      // Normal hover behavior
699      indicator.style.left = `${relativeLeft}px`;
700      indicator.style.opacity = '1';
701    }
702  });
703
704  link.addEventListener('mouseleave', () => {
705    if (!document.querySelector('.dropdownRoot:hover')) {
706      indicator.style.opacity = '0';
707    }
708  });
709});
710
711const dropdownRoot = document.querySelector('.dropdownRoot');
712if (dropdownRoot) {
713  dropdownRoot.addEventListener('mouseenter', () => {
714    indicator.style.opacity = '1';
715  });
716  dropdownRoot.addEventListener('mouseleave', () => {
717    indicator.style.opacity = '0';
718  });
719}
720}
721
722});
723// header arrow center new js 8-8-25 end
724jQuery(window).resize(function () {
725  setTimeout(function () {
726    equalHeights();
727  }, 300);
728});
729jQuery(window).on("load", function () {
730  equalHeights();
731});
732
733// number animation on range change 
734jQuery(document).ready(function() {
735  function parsePages(text) {
736    var match = text.match(/^[\d,]+/);
737    return match ? parseInt(match[0].replace(/,/g, ''), 10) || 0 : 0;
738  }
739  function formatPages(num, originalText) {
740    if (originalText.includes('pages monthly')) {
741      return num.toLocaleString('en-US') + ' pages monthly';
742    }
743    var suffix = originalText.replace(/^[\d,]+/, '');
744    return num.toLocaleString('en-US') + suffix;
745  }
746  function parsePrice(text) {
747    var numStr = text.replace(/[^0-9.]/g, '');
748    return parseFloat(numStr) || 0;
749  }
750  function formatPrice(num, prefix, suffix, originalText) {
751  // Convert number to string to analyze its decimal part
752  var numStr = num.toString();
753  var decimalPart = numStr.includes('.') ? numStr.split('.')[1] : '';
754  
755  // Remove trailing zeros and determine significant decimal places
756  var significantDecimal = decimalPart.replace(/0+$/, '');
757  var decimalPlaces = significantDecimal.length > 0 ? Math.min(significantDecimal.length, 3) : 2; // Default to 2 if no decimals, cap at 3
758  
759  var formattedNum = Number(num).toLocaleString('en-US', {
760    minimumFractionDigits: decimalPlaces,
761    maximumFractionDigits: decimalPlaces
762  });
763  return prefix + formattedNum + suffix;
764}
765  var config = { characterData: true, childList: true, subtree: true };
766
767  function setupAnimation($element, type, index) {
768    var isPrice = type === 'price';
769    var initialText = $element.text().trim();
770    var suffix = initialText.replace(/\$?[\d.,]+/, '').trim();
771    var prefix = isPrice ? (initialText.startsWith('$') ? '$' : '') : '';
772    var parseFunc = isPrice ? parsePrice : parsePages;
773    var formatFunc = isPrice ?
774      function(num) { return formatPrice(num, prefix, suffix, initialText); } :
775      function(num) { return formatPages(num, initialText); };
776    var state = {
777      oldValue: parseFunc(initialText),
778      pendingValue: parseFunc(initialText),
779      oldText: initialText,
780      isNumeric: false,
781      isAnimating: false,
782      debounceTimeout: null
783    };
784
785    // Improved check for a purely numeric string
786    state.isNumeric = (parseFunc(initialText).toString() === initialText.replace(/[^0-9.]/g, ''));
787
788    if (!state.isNumeric) {
789      state.oldText = initialText;
790    }
791
792    function debounceAnimation() {
793      if (state.debounceTimeout) clearTimeout(state.debounceTimeout);
794      state.debounceTimeout = setTimeout(function() {
795        animateUpdate();
796      }, 100);
797    }
798
799    function animateUpdate() {
800      if (state.isAnimating || state.pendingValue === state.oldValue) return;
801      state.isAnimating = true;
802
803      // Counting animation for animate-pricing and animation-pricing
804      var hasAnimateClass = $element.hasClass('animate-pricing') || $element.hasClass('animation-pricing');
805      if (hasAnimateClass) {
806        $element.text(formatFunc(0)); // Start from 0
807        var startValue = 0;
808        var endValue = state.pendingValue;
809        var duration = 600; // Animation duration in milliseconds
810        var startTime = null;
811
812        function step(timestamp) {
813          if (!startTime) startTime = timestamp;
814          var progress = Math.min((timestamp - startTime) / duration, 1);
815          var currentValue = startValue + (endValue - startValue) * progress;
816          // Avoid premature rounding; use exact value during animation
817          $element.text(formatFunc(currentValue));
818          if (progress < 1) {
819            requestAnimationFrame(step);
820          } else {
821            $element.text(formatFunc(endValue));
822            state.oldValue = state.pendingValue;
823            state.isAnimating = false;
824            observer.observe($element[0], config); // Reconnect the observer
825          }
826        }
827
828        requestAnimationFrame(step);
829      } else {
830        // For elements without animate-pricing or animation-pricing, just update the value
831        setTimeout(function () {
832          state.oldValue = state.pendingValue;
833          state.isAnimating = false;
834          observer.observe($element[0], config);
835        }, 600);
836      }
837    }
838
839    var observer = new MutationObserver(function(mutations) {
840      mutations.forEach(function(mutation) {
841        if (mutation.type === 'characterData' || mutation.type === 'childList') {
842          var currentText = $element.text().trim();
843          var attemptedValue = parseFunc(currentText);
844          var currentPrefix = prefix;
845          var currentSuffix = suffix;
846          var isMatchingStructure = currentText.startsWith(currentPrefix) && currentText.endsWith(currentSuffix);
847          if (!isMatchingStructure) {
848            state.oldText = currentText;
849            state.isNumeric = false;
850            return;
851          }
852          var middle = currentText.substring(currentPrefix.length, currentText.length - currentSuffix.length).trim();
853          if (middle === '') {
854            state.oldText = currentText;
855            state.isNumeric = false;
856            return;
857          }
858          var middleNoComma = middle.replace(/,/g, '');
859          var isValidNumber = /^[0-9.]+$/.test(middleNoComma) && !isNaN(attemptedValue);
860          if (isValidNumber && state.isNumeric && Math.abs(attemptedValue - state.oldValue) > (isPrice ? 0.0001 : 0)) {
861            state.pendingValue = attemptedValue;
862
863            // Disconnect the observer *before* starting the animation
864            observer.disconnect();
865
866            // Use a debounce to prevent multiple animations from triggering at once
867            debounceAnimation();
868          } else if (isValidNumber) {
869            state.oldValue = attemptedValue;
870            state.pendingValue = attemptedValue;
871            state.isNumeric = true;
872          } else {
873            state.oldText = currentText;
874            state.isNumeric = false;
875            // console.warn(`Non-numeric text detected: ${currentText}`);
876          }
877        }
878      });
879    });
880
881    if ($element[0]) {
882      observer.observe($element[0], config);
883      // console.log(`Observer attached to ${$element.attr('class')}`);
884    } else {
885      // console.error(`Element not found for selector: ${$element.selector}`);
886    }
887  }
888
889  jQuery('.animation-pricing').each(function(index) {
890    setupAnimation(jQuery(this), 'price', index);
891  });
892  jQuery('.animation-pages').each(function(index) {
893    setupAnimation(jQuery(this), 'animation-pages', index);
894  });
895  jQuery('.animate-pricing').each(function(index) {
896    setupAnimation(jQuery(this), 'price', index);
897  });
898});

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.