1var ERROR_QUEUE = []; 2var ERROR_COUNTER = false; 3var ERROR_DISPLAY = function() { 4 window.clearTimeout(ERROR_COUNTER); 5 ERROR_COUNTER = false; 6 if (ERROR_QUEUE.length) { 7 window.alert(ERROR_QUEUE.join("\n")); 8 } 9 ERROR_QUEUE = []; 10} 11 12 13jQuery(window).load(function() { 14 15 //this applies a phone mask to any input with class="phone-input" on all devices except android 16 var ua = navigator.userAgent.toLowerCase(); 17 var isAndroid = ua.indexOf("android") > -1; //&& ua.indexOf("mobile"); 18 if(isAndroid) { 19 //jQuery(".phone-input, .date-input").attr('maxlength','10'); 20 jQuery(".year-input").attr('maxlength','4'); 21 jQuery('.date-input').mask("99/99/9999"); 22 jQuery(".zip-input").attr('maxlength','5'); 23 jQuery('#zip').mask('99999') 24 } 25 else { 26 //jQuery('.phone-input').mask('(999) 999-9999'); 27 jQuery('.date-input').mask('99/99/9999'); 28 jQuery('.year-input').mask('9999'); 29 jQuery('.zip-input').mask('99999'); 30 jQuery('#zip').mask('99999'); 31 32 /* Added 2016-03-16 by AI-JW. 33 * Sets the cursor position to the start of the input 34 * for the phone field whenever the field is clicked. 35 */ 36 37 /* 38 jQuery('.phone-input').click(function(){ 39 jQuery('.phone-input').setCursorPosition(0); 40 }); 41 */ 42 43 } 44 45 jQuery('#quick-form, #quick-form2').keypress(function(event) { 46 if (event.keyCode == 13) { 47 event.preventDefault(); 48 } 49 }); 50 51 //remove the school name from the program select options 52 jQuery("#campus option").each(function() { 53 this.innerHTML = this.innerHTML.replace("School Name Goes Here - ",""); 54 }); 55 56 57 //only allows number for any input with class="number-input" 58 jQuery(".number-input").keydown(function(event) { 59 // Allow: backspace, delete, tab and escape 60 if ( event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || 61 // Allow: Ctrl+A 62 (event.keyCode == 65 && event.ctrlKey === true) || 63 // Allow: home, end, left, right 64 (event.keyCode >= 35 && event.keyCode <= 39)) { 65 // let it happen, don't do anything 66 return; 67 } 68 else { 69 // Ensure that it is a number and stop the keypress 70 if ((event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 )) { 71 event.preventDefault(); 72 } 73 } 74 }); 75 76 77 78 79 //make selects wider on click so that options aren't cut off in IE8 80 if (navigator.userAgent.match(/MSIE\s(?!9.0)/)) { 81 jQuery("#campus").mousedown(function(){ 82 jQuery(this).css("width", "350px"); 83 }).focusout(function(){ 84 jQuery(this).css("width", "100%"); 85 }).change(function(){ 86 jQuery(this).css("width", "100%"); 87 }); 88 jQuery("#program").mousedown(function(){ 89 jQuery(this).css("width", "350px"); 90 }).focusout(function(){ 91 jQuery(this).css("width", "100%"); 92 }).change(function(){ 93 jQuery(this).css("width", "100%"); 94 }); 95 } 96 97 jQuery("#quick-form input, #quick-form select, #quick-form1 input, #quick-form1 select, #quick-form2 input, #quick-form2 select").mouseenter(function() { 98 jQuery(this).next("label.error").fadeOut(); 99 }); 100 101 // Inline labels for inputs 102 /* 103 jQuery("#quick-form input[type=text], #quick-form1 input[type=text], #quick-form2 input[type=text]").attr('value', function(){return this.title}).addClass('unfilled'); 104 jQuery("#quick-form input[type=text], #quick-form1 input[type=text], #quick-form2 input[type=text]").focus(function() { 105 if (this.value == this.title) 106 jQuery(this).val('').removeClass('unfilled'); 107 }); 108 jQuery("#quick-form input[type=text], #quick-form1 input[type=text], #quick-form2 input[type=text]").blur(function() { 109 if (this.value == '') 110 jQuery(this).attr('value', function(){return this.title}).addClass('unfilled'); 111 });
112 */ 113 114 115 // Check input value against inline label 116 jQuery.validator.addMethod("checkLabel", function( value, element ) { 117 return this.optional(element) || value != element.title; 118 }, "Please enter a value."); 119 120 jQuery.validator.addMethod("checkPhoneValue", function(value) { 121 value = value.replace(/[^0-9]/g,'').replace(/^.*(.{10})$/,'$1'); 122 if (10 != value.length) { return false; } 123 var invalidPhoneNumbers = ['(000) 000-0000', '(111) 111-1111', '(222) 222-2222', '(333) 333-3333', "(444) 444-4444", "(555) 555-5555", "(666) 666-6666", "(777) 777-7777", "(888) 888-8888", "(999) 999-9999", "(123) 456-7890",'0000000000', '1111111111', '2222222222', '3333333333', "4444444444", "5555555555", "6666666666", "7777777777", "8888888888", "9999999999", "1234567890"]; 124 return jQuery.inArray(value, invalidPhoneNumbers) == -1; 125 }, 'Please enter valid phone number.'); 126 127 jQuery.validator.addMethod("phoneGlobal", function(value, element) { 128 return this.optional( element ) || /^[\(\)\-\.\+ 0-9]{10,}$/.test( value ); 129 }, "Please specify a valid phone number"); 130 131 jQuery.validator.addMethod('checkPhoneValidAttr', function(value, element) { 132 return element.getAttribute('data-valid') === 'true'; 133 }, 'Please enter a valid phone number.'); 134 135 136 137 // Validation 138 jQuery("#quick-form").validate({ 139 ignore: false, 140 onclick: false, 141 onfocusout: false, 142 onsubmit: true, 143 onkeyup: false, 144 onkeydown: false, 145 rules: { 146 campus: { 147 required: true 148 }, 149 program: { 150 required: true 151 }, 152 firstname: { 153 required: true, 154 checkLabel: true 155 }, 156 lastname: { 157 required: true, 158 checkLabel: true 159 }, 160 zip: { 161 required: true, 162 checkLabel: true 163 }, 164 dayphone: { 165 required: true, 166 checkPhoneValidAttr: true 167 }, 168 email: { 169 required: true, 170 email: true, 171 checkLabel: true 172 } 173 }, 174 messages: { 175 campus: "Please select a campus.", 176 program: "Please select a program.", 177 firstname: "Please enter your first name.", 178 lastname: "Please enter your last name.", 179 dayphone: "Please enter a valid phone number.", 180 email: "Please enter a valid email address." 181 }, 182 // Use this function to force alert-box errors instead of inline labels 183 showErrors: function(errorMap, errorList) { 184 jQuery.each(errorList, function(i, e) { 185 ERROR_QUEUE.push(e.message); 186 }); 187 188 if (!ERROR_COUNTER) { 189 ERROR_COUNTER = window.setTimeout(ERROR_DISPLAY, 500); 190 } 191 } 192 }); 193 194 // Validation 195 jQuery("#quick-form1").validate({ 196 ignore: false, 197 onclick: false, 198 onfocusout: false, 199 onsubmit: true, 200 onkeyup: false, 201 onkeydown: false, 202 rules: { 203 campus: { 204 required: true 205 }, 206 program: { 207 required: true 208 }, 209 firstname: { 210 required: true, 211 checkLabel: true 212 }, 213 lastname: { 214 required: true, 215 checkLabel: true 216 }, 217 dayphone: { 218 required: true, 219 checkPhoneValidAttr: true 220 }, 221 email: { 222 required: true, 223 email: true, 224 checkLabel: true 225 } 226 }, 227 messages: { 228 campus: "Please select a campus.", 229 program: "Please select a program.", 230 firstname: "Please enter your first name.", 231 lastname: "Please enter your last name.", 232 dayphone: "Please enter a valid phone number.", 233 email: "Please enter a valid email address." 234 }, 235 // Use this function to force alert-box errors instead of inline labels 236 showErrors: function(errorMap, errorList) { 237 jQuery.each(errorList, function(i, e) { 238 ERROR_QUEUE.push(e.message); 239 }); 240 241 if (!ERROR_COUNTER) { 242 ERROR_COUNTER = window.setTimeout(ERROR_DISPLAY, 500); 243 } 244 } 245 });
246 247 jQuery("[eo-lead-magnet-form]").validate({ 248 ignore: false, 249 onclick: false, 250 onfocusout: false, 251 onsubmit: true, 252 onkeyup: false, 253 onkeydown: false, 254 rules: { 255 campus: { 256 required: true 257 }, 258 program: { 259 required: true 260 }, 261 firstname: { 262 required: true, 263 checkLabel: true 264 }, 265 lastname: { 266 required: true, 267 checkLabel: true 268 }, 269 dayphone: { 270 required: true, 271 checkPhoneValidAttr: true 272 }, 273 email: { 274 required: true, 275 email: true, 276 checkLabel: true 277 } 278 }, 279 messages: { 280 campus: "Please select a campus.", 281 program: "Please select a program.", 282 firstname: "Please enter your first name.", 283 lastname: "Please enter your last name.", 284 dayphone: "Please enter a valid phone number.", 285 email: "Please enter a valid email address." 286 }, 287 // Use this function to force alert-box errors instead of inline labels 288 showErrors: function(errorMap, errorList) { 289 jQuery.each(errorList, function(i, e) { 290 ERROR_QUEUE.push(e.message); 291 }); 292 293 if (!ERROR_COUNTER) { 294 ERROR_COUNTER = window.setTimeout(ERROR_DISPLAY, 500); 295 } 296 } 297 }); 298 299 jQuery("#quick-form2").validate({ 300 ignore: false, 301 onclick: false, 302 onfocusout: false, 303 onsubmit: true, 304 onkeyup: false, 305 onkeydown: false, 306 rules: { 307 campus: { 308 required: true 309 }, 310 program: { 311 required: true 312 }, 313 firstname: { 314 required: true, 315 checkLabel: true 316 }, 317 lastname: { 318 required: true, 319 checkLabel: true 320 }, 321 dayphone: { 322 required: true, 323 checkPhoneValidAttr: true 324 }, 325 email: { 326 required: true, 327 email: true, 328 checkLabel: true 329 } 330 }, 331 messages: { 332 campus: "Please select a campus.", 333 program: "Please select a program.", 334 firstname: "Please enter your first name.", 335 lastname: "Please enter your last name.", 336 dayphone: "Please enter a valid phone number.", 337 email: "Please enter a valid email address." 338 }, 339 // Use this function to force alert-box errors instead of inline labels 340 showErrors: function(errorMap, errorList) { 341 jQuery.each(errorList, function(i, e) { 342 ERROR_QUEUE.push(e.message); 343 }); 344 345 if (!ERROR_COUNTER) { 346 ERROR_COUNTER = window.setTimeout(ERROR_DISPLAY, 500); 347 } 348 } 349 }); 350 351 jQuery("#request-form").validate({ 352 ignore: false, 353 onclick: false, 354 onfocusout: false, 355 onsubmit: true, 356 onkeyup: false, 357 onkeydown: false, 358 rules: { 359 campus: { 360 required: true 361 }, 362 program: { 363 required: true 364 }, 365 firstname: { 366 required: true, 367 checkLabel: true 368 }, 369 lastname: { 370 required: true, 371 checkLabel: true 372 }, 373 dayphone: { 374 required: true, 375 checkPhoneValidAttr: true 376 }, 377 email: { 378 required: true, 379 email: true, 380 checkLabel: true 381 } 382 }, 383 messages: { 384 campus: "Please select a campus.", 385 program: "Please select a program.", 386 firstname: "Please enter your first name.", 387 lastname: "Please enter your last name.", 388 dayphone: "Please enter a valid phone number.", 389 email: "Please enter a valid email address." 390 }, 391 // Use this function to force alert-box errors instead of inline labels 392 showErrors: function(errorMap, errorList) { 393 jQuery.each(errorList, function(i, e) { 394 ERROR_QUEUE.push(e.message); 395 }); 396 397 if (!ERROR_COUNTER) { 398 ERROR_COUNTER = window.setTimeout(ERROR_DISPLAY, 500); 399 } 400 } 401 });
402 403 404 jQuery("form.request-info-form.contact-us-form.main-inline-form.main-popup-form").validate({ 405 ignore: false, 406 onclick: false, 407 onfocusout: false, 408 onsubmit: true, 409 onkeyup: false, 410 onkeydown: false, 411 rules: { 412 campus: { 413 required: true 414 }, 415 program: { 416 required: true 417 }, 418 firstname: { 419 required: true 420 }, 421 lastname: { 422 required: true 423 }, 424 dayphone: { 425 required: true, 426 checkPhoneValidAttr: true 427 }, 428 email: { 429 required: true, 430 email: true 431 } 432 }, 433 messages: { 434 campus: "Please select a location of interest.", 435 program: "Please select a program of interest.", 436 firstname: "Please enter your first name.", 437 lastname: "Please enter your last name.", 438 dayphone: "Please enter a valid phone number.", 439 email: "Please enter a valid email address." 440 }, 441 // Use this function to force alert-box errors instead of inline labels 442 showErrors: function(errorMap, errorList) { 443 jQuery.each(errorList, function(i, e) { 444 ERROR_QUEUE.push(e.message); 445 }); 446 447 if (!ERROR_COUNTER) { 448 ERROR_COUNTER = window.setTimeout(ERROR_DISPLAY, 100); 449 } 450 } 451 }); 452 453 454 jQuery("form.equest-info-form.contact-us-form.main-inline-form.inline").validate({ 455 ignore: false, 456 onclick: false, 457 onfocusout: false, 458 onsubmit: true, 459 onkeyup: false, 460 onkeydown: false, 461 rules: { 462 campus: { 463 required: true 464 }, 465 program: { 466 required: true 467 }, 468 CurriculumID: { 469 required: true 470 }, 471 firstname: { 472 required: true, 473 }, 474 lastname: { 475 required: true, 476 }, 477 dayphone: { 478 required: true, 479 checkPhoneValidAttr: true 480 }, 481 email: { 482 required: true, 483 email: true 484 } 485 }, 486 messages: { 487 campus: "Please select a location of interest.", 488 program: "Please select a program of interest.", 489 firstname: "Please enter your first name.", 490 lastname: "Please enter your last name.", 491 dayphone: "Please enter a valid phone number.", 492 email: "Please enter a valid email address." 493 }, 494 // Use this function to force alert-box errors instead of inline labels 495 showErrors: function(errorMap, errorList) { 496 jQuery.each(errorList, function(i, e) { 497 ERROR_QUEUE.push(e.message); 498 }); 499 500 if (!ERROR_COUNTER) { 501 ERROR_COUNTER = window.setTimeout(ERROR_DISPLAY, 100); 502 } 503 } 504 }); 505 506 function escoffierSetCookie(cname, cvalue, exdays) { 507 var d = new Date(); 508 d.setTime(d.getTime() + (exdays * 60 * 60 * 1000)); 509 var expires = "expires="+d.toUTCString(); 510 const safeValue = encodeURIComponent(cvalue); 511 document.cookie = `${cname}=${safeValue}; ${expires}; path=/;`; 512 } 513 514 function escoffierGetCookie(cname) { 515 const name = cname + "="; 516 const ca = document.cookie.split(';'); 517 for (let i = 0; i < ca.length; i++) { 518 let c = ca[i]; 519 while (c.charAt(0) === ' ') c = c.substring(1); 520 if (c.indexOf(name) === 0) { 521 const raw = c.substring(name.length, c.length); 522 return decodeURIComponent(raw); 523 } 524 } 525 return ""; 526 } 527 528 async function escoffierFetchAndCacheVisitorLocationData() { 529 const cookieName = 'escoffierVisitorLocationData'; 530 let visitorLocationData = escoffierGetCookie(cookieName); 531 532 if (visitorLocationData) { 533 return JSON.parse(visitorLocationData); 534 } 535 536 try { 537 const response = await fetch('https://ipwhois.pro/?key=9tZtvG1WqjWGXcP3'); 538 const data = await response.json(); 539 540 if(data.success == false){ 541 const fallbackData = { 542 'continent': 'North America', 543 'continent_code': 'NA', 544 'country': 'United States', 545 'country_code': 'US', 546 'region': 'Colorado', 547 'region_code': 'CO',
548 'city': 'Boulder' 549 }; 550 escoffierSetCookie(cookieName, JSON.stringify(fallbackData), 720); 551 return fallbackData; 552 } 553 escoffierSetCookie(cookieName, JSON.stringify({ 554 'continent': data.continent, 555 'continent_code': data.continent_code, 556 'country': data.country, 557 'country_code': data.country_code, 558 'region': data.region, 559 'region_code': data.region_code, 560 'city': data.city 561 }), 720); 562 563 return data; 564 } catch (error) { 565 console.error('Error fetching location IP data', error); 566 return false; 567 } 568 } 569 570 const input = '[action="#process-lead"] input[name="intl-tel"]'; 571 document.querySelectorAll(input).forEach((phoneField) => { 572 const tel = window.intlTelInput(phoneField, { 573 loadUtils: () => import('https://cdn.jsdelivr.net/npm/[email protected]/build/js/utils.js'), 574 autoPlaceholder: '', 575 validationNumberTypes: null, 576 useFullscreenPopup: false, 577 initialCountry: 'auto', 578 geoIpLookup: callback => { 579 escoffierFetchAndCacheVisitorLocationData().then(data => { 580 if(data){ 581 callback(data.country_code.toLowerCase()); 582 } else { 583 callback('us'); 584 } 585 }); 586 }, 587 }); 588 ['change', 'countrychange'].forEach(eventType => { 589 phoneField.addEventListener(eventType, (event) => { 590 const el = event.target, 591 form = el.closest('form'), 592 leadPhone = form && form.querySelector('[name="dayphone"]'); 593 if (!leadPhone) { 594 return; 595 } 596 const valid = (typeof tel.isValidNumberPrecise === 'function') 597 ? !!tel.isValidNumberPrecise() 598 : !!tel.isValidNumber(); 599 leadPhone.setAttribute('data-valid', String(valid)); 600 leadPhone.value = tel.getNumber(); 601 }); 602 }); 603 }); 604 605 //custom code 606 jQuery('.online-req-info').parents('#theme-page').addClass('theme-wrap'); 607 jQuery('.online-req-info').parents('.column_container').addClass('left-column'); 608 609 jQuery('.main-navigation-ul .menu-item').each(function(){ 610 var getText = jQuery(this).find('a').text(); 611 if(getText == 'Request Info'){ 612 jQuery(this).addClass('quick-form-nav'); 613 } 614 }); 615 616 jQuery('.quick-form-nav').first().click(function(e){ 617 if(jQuery('.popup-form').length > 0){ 618 e.preventDefault(); 619 jQuery('.popup-form').slideToggle(); 620 } 621 }); 622 623 jQuery('.disclosure-wrapper').click(function(e){ 624 e.preventDefault(); 625 }); 626 627 628 629 jQuery('.express-consent a').hover( 630 function(){ 631 632 jQuery("#quick-form1 #disclosure-tooltip, #quick-form2 #disclosure-tooltip").stop(true,true).fadeIn('fast').animate({ 633 opacity:'1' 634 }); 635 }, 636 function(){ 637 jQuery("#quick-form1 #disclosure-tooltip, #quick-form2 #disclosure-tooltip").stop(true, true).animate({ 638 opacity:'0' 639 }).fadeOut('fast'); 640 } 641 ); 642 643 jQuery.fn.setCursorPosition = function(pos) { 644 this.each(function(index, elem) { 645 if (elem.setSelectionRange) { 646 elem.setSelectionRange(pos, pos); 647 } else if (elem.createTextRange) { 648 var range = elem.createTextRange(); 649 range.collapse(true); 650 range.moveEnd('character', pos); 651 range.moveStart('character', pos); 652 range.select(); 653 } 654 }); 655 return this; 656 }; 657}); 658 659jQuery(document).ready(function(){ 660 jQuery('[eo-lead-magnet-next]').click(function(){ 661 jQuery(this).closest('.eo-lead-magnet').addClass('step-form'); 662 });
663});
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.