1(function() { 2 'use strict'; 3 4 var firstStateUpdate = true; 5 6 JavascriptHandler.AddHandler(function() { 7 8 if($('.form--submit, .form-submitter, .form--newsletter').length == 0) { 9 return; 10 } 11 12 $.ajax({ 13 url: '/lookups/country_list.html?locale=' + globalLang, 14 type: 'GET', 15 }) 16 .done(function(data) { 17 window.globalCountryList = data; 18 var countries = Array.prototype.reduce.call(Object.keys(window.globalCountryList), function(m, k) { 19 return m.concat([ 20 [k, window.globalCountryList[k]] 21 ]); 22 }, []).sort(function(a, b) { 23 if (a[1] > b[1]) return 1; 24 if (a[1] < b[1]) return -1; 25 return 0; 26 }); 27 var countryListing = 28 Array.prototype.reduce.call(countries, function(m, v) { 29 return m + '<option value="' + v[0] + '" >' + v[1] + '</option>'; 30 }, ''); 31 32 var $countryElem = $('[name=countryCode]'); 33 34 $countryElem.on('change', function(e) { 35 var newVal = $(this).val(); 36 _.each($countryElem, function(value, key, list) { 37 updateStateList($(value)); 38 }); 39 }); 40 41 _.each($countryElem, function(value, key, list){ 42 $(value).html($(value).html() + countryListing); 43 }); 44 45 if (window.globalGeolocationData) { 46 $(document).trigger('geolocated'); 47 } 48 }); 49 50 initGeolocation(); 51 var $forms = $('.form--submit, .form-submitter, .form--newsletter'); 52 ReCaptcha.init($forms, onFormSubmit); 53 if (!loadjs.isDefined('parsleyjs')) { 54 var files = ['/js-static/parsley/parsley.min.js?_=' + cacheId, ReCaptcha.JSUrl()]; 55 if(globalLang == "da" || globalLang == "de" || globalLang == "el" || globalLang == "es" || globalLang == "he" || globalLang == "hu" || globalLang == "it" || globalLang == "ja" || globalLang == "nl" || globalLang == "no" || globalLang == "ru" || globalLang == "sv" || globalLang == "pt") { 56 files.push('/js-static/parsley/i18n/'+globalLang+'.js?_=' + cacheId); 57 } 58 loadjs(files, 'parsleyjs', {async: false}); 59 } 60 61 if($('.newsletter-wide.form--submit, .form-submitter, .form--newsletter, .form--submit__tour').length > 0) { 62 $(document).bind('form-success', function (event, form, data) { 63 $(form).addClass('form__success'); 64 $('.newsletter-wide--wrapper, .newsletter-landing--wrapper, .newsletter-list-view--wrapper, .newsletter-visual-block--wrapper').addClass('d-none'); 65 $('.newsletter-wide--thank-you, .newsletter-landing--thank-you, .newsletter-list-view--thank-you, .newsletter-visual-block--thank-you').removeClass('d-none'); 66 67 var firstName = $(form).find('[name="firstName"]').val(); 68 $(form).find('first-name').html(firstName); 69 70 }); 71 } 72 73 74 if($('[data-toggle="tooltip"]').length > 0 && !loadjs.isDefined('bootstrapjs')) { 75 loadjs.ready('bootstrapjs', function () { 76 $('[data-toggle="tooltip"]').tooltip(); 77 }); 78 loadjs(['/plugins/bootstrap/js/bootstrap.bundle.min.js?_=' + cacheId], 'bootstrapjs'); 79 } 80 81 loadjs.ready('parsleyjs', function() { 82 83 _.each($forms, function(value, key, list){ 84 85 var $form = $(value); 86 87 initAutowiredForm($form); 88 89 // lazy load the country list for the country <select> box 90 var $countryElem = $form.find('[name="countryCode"]'); 91 var $stateElem = $form.find('[name="stateProvince"]'); 92 var defaultCountry = 'US'; 93 94 $form.submit(ReCaptcha.onSubmit); 95 }); 96 }); 97 98 initDatePicker(); 99 }, "forms"); 100 101 function setupPicker() { 102 var parts = JavascriptHandler.Path.match(/\/(?:events|services)\/(.*)\/(?:confirm|enroll).html/); 103 104 var options = { 105 format: "d-M-yyyy", 106 autoclose: true, 107 startDate: '0d', 108 endDate: '+60d', 109 language: globalLang 110 }; 111 112 if($('.datepicker').closest('.form--submit') && $('.datepicker').closest('.form--submit').find('.datepicker-wrapper').length > 0) { 113 options.container = '.datepicker-wrapper'; 114 } 115 116 if(parts) { 117 if(parts[1] == "dianetics-seminar") { 118 options.daysOfWeekDisabled = [0,1,2,3,4,5]; 119 } else if(parts[1] == "sunday-service") { 120 options.daysOfWeekDisabled = [1,2,3,4,5,6]; 121 } else if (window.activityDiabled) { 122 options.daysOfWeekDisabled = activityDiabled; 123 } 124 } 125 126 var picker = $('.datepicker').datepicker(options); 127 picker.on('changeDate', function(e){ 128 if($('[name="register_time"]').length > 0) { 129 var params = {
130 date: Math.ceil(e.date.getTime() / 1000), 131 }; 132 if(globalGetParams.orgid) { 133 params.orgid = globalGetParams.orgid; 134 } 135 $.ajax({ 136 type: "GET", 137 url: window.location.pathname, 138 data: params, 139 dataType: "html", 140 success: function (response) { 141 if($(response).find('[name="register_time"]').length > 0) { 142 $('[name="register_time"]').html( 143 $(response).find('[name="register_time"]').html() 144 ); 145 } 146 $(document).trigger('datapickerchanged', {date: e.date}); 147 } 148 }); 149 } 150 } 151 ); 152 153 // find first available date 154 var date = new Date(); 155 date.setDate(date.getDate()+1); 156 var datepicker = picker.data('datepicker'); 157 for(var i = 0; i < 7; i++) { 158 if(datepicker && !datepicker.dateIsDisabled(date)) { 159 break; 160 } 161 date.setDate(date.getDate()+1); 162 } 163 datepicker && datepicker.setDate(date); 164 } 165 166 function initDatePicker() { 167 // autocomplete for org confirm pages 168 var parts = JavascriptHandler.Path.match(/\/(?:events|services)\/(.*)\/(?:confirm|enroll).html/); 169 if( 170 (parts && parts.length > 1) || 171 $('.datepicker').length > 0 172 ) { 173 174 if(!loadjs.isDefined('bootstrap-datepicker')) { 175 // if lang file is not there still load calendar 176 loadjs([ 177 '/plugins/datepicker/js/bootstrap-datepicker.min.js?_=' + cacheId, 178 'css!/plugins/datepicker/css/bootstrap-datepicker.min.css?_=' + cacheId, 179 ], 'bootstrap-datepicker', { 180 success: function() { 181 if(globalLang == "en") { 182 setupPicker(); 183 } else { 184 loadBoostrapLocale(); 185 } 186 }, 187 error: function() { 188 loadBoostrapLocale(); 189 } 190 }); 191 } else { 192 setTimeout(function() { 193 if(globalLang == "en") { 194 setupPicker(); 195 } else { 196 loadBoostrapLocale(); 197 } 198 }, 1000); 199 } 200 } 201 } 202 203 function loadBoostrapLocale() { 204 loadjs(['/plugins/datepicker/locales/bootstrap-datepicker.'+globalLang+'.min.js?_=' + cacheId], { 205 success: function() { 206 setupPicker(); 207 }, 208 error: function() { 209 setupPicker(); 210 } 211 }); 212 } 213 214 // EU country list, brought over from PHP 215 // @ref http://europa.eu/about-eu/countries/index_en.htm 216 var gcui_eu_country_list = { AT: 1, BE: 1, BG: 1, CY: 1, CZ: 1, DK: 1, EE: 1, FI: 1, FR: 1, DE: 1, GR: 1, HU: 1, IE: 1, IT: 1, LV: 1, LT: 1, LU: 1, MT: 1, NL: 1, PL: 1, PT: 1, RO: 1, SK: 1, SI: 1, ES: 1, SE: 1, GB: 1 }; 217 218 // callback when country changes - update the state/province list 219 function updateStateList($countryElem) { 220 221 if(!$countryElem) { 222 $countryElem = $('[name="countryCode"]'); 223 } 224 225 if (!$countryElem.val()) return; 226 var countrySelected = $countryElem.val().toUpperCase(); 227 228 var $form = $countryElem.closest('form'); 229 230 var $stateElem = $form.find('[name="stateProvince"]'); 231 232 if (gcui_eu_country_list[countrySelected]) { 233 $form.find('.eu-only').slideDown(50); 234 $form.find('.non-eu').slideUp(50); 235 236 $form.find('.eu-only input, .eu-only select').attr('required', 'required'); 237 $form.find('.non-eu input, select .non-eu').removeAttr('required'); 238 } else {
239 $form.find('.eu-only').slideUp(50); 240 $form.find('.non-eu').slideDown(50); 241 242 // $form.find('.non-eu input, select .non-eu').attr('required', 'required'); 243 $form.find('.eu-only input, .eu-only select').removeAttr('required'); 244 } 245 246 var defaultCountry = safeNav('globalGeolocationData.estimated_location.country_code'); 247 248 $.ajax({ 249 url: '/lookups/state_list.html?countryCode=' + countrySelected, 250 dataType: 'json', 251 cache: true, 252 // jsonpCallback: 'state_list_lookup_callback', 253 success: function(data) { 254 $stateElem.html(_gcui_selectElem + 255 _.reduce(data, function(m, v, k) { 256 return m + '<option value="' + k + '">' + v + '</option>'; 257 }, '') + 258 '<option data-other="true" value="other">' + _gcui_otherText + '</option>' 259 ); 260 if (firstStateUpdate || $stateElem.length == 1) { 261 var defaultState = safeNav('globalGeolocationData.estimated_location.region_code'); 262 if (defaultState) defaultState = defaultState.toUpperCase(); 263 if (defaultState && $stateElem.find('[value="' + defaultCountry + '-' + defaultState + '"]').length) $stateElem.val(defaultCountry + '-' + defaultState); 264 firstStateUpdate = false; 265 } else { 266 $stateElem.find('[value=""]').attr('selected', 'selected'); 267 } 268 269 }, 270 error: function(xhr, status, error) { 271 var err = xhr.responseText; 272 window.console && console.error && console.error(err); 273 $stateElem.html(_gcui_selectElem + '<option data-other="true" value="other">' + _gcui_otherText + '</option>'); 274 } 275 }); 276 } 277 278 279 /** 280 Safe navigation, so instead of: 281 282 `window.globalGeolocationData && globalGeolocationData.estimated_location && globalGeolocationData.estimated_location.country_code` 283 284 you can do 285 286 `safeNav("globalGeolocationData.estimated_location.country_code")` 287 288 @from http://stackoverflow.com/questions/6613952/is-there-a-null-coalescing-elvis-operator-or-safe-navigation-operator-in-javas 289 */ 290 function safeNav(stringOfDotSeparatedParameters) { 291 var returnObject = window, parameters = stringOfDotSeparatedParameters.split('.'), i, parameter; 292 for (i = 0; i < parameters.length; i++) { 293 parameter = parameters[i]; 294 returnObject = returnObject[parameter]; 295 if (returnObject === undefined || returnObject === null) return returnObject; 296 } 297 return returnObject; 298 }; 299 300 // same as `safeNav()`, but takes an object to start from (not `window`) 301 function safeNav2(obj, stringOfDotSeparatedParameters) { 302 var returnObject = obj, parameters = stringOfDotSeparatedParameters.split('.'), i, parameter; 303 for (i = 0; i < parameters.length; i++) { 304 parameter = parameters[i]; 305 returnObject = returnObject[parameter]; 306 if (returnObject === undefined || returnObject === null) return returnObject; 307 } 308 return returnObject; 309 }; 310 311 function onFormSubmit(e) { 312 var $form = $(e.target); 313 314 var formRes = _.reduce($form.find('input,textarea,select'), function(m, elem) { 315 if ($(elem).hasClass('other-input')) { 316 return m; 317 } 318 if (elem.name == "") return m; 319 if (elem.type == 'checkbox') { 320 m[elem.name] = elem.checked; 321 } else { 322 m[elem.name] = elem.value; 323 } 324 if (elem.type == 'radio' && elem.checked) { 325 m[elem.name] = elem.value; 326 } 327 return m; 328 }, {}); 329 330 if(formRes["firstName"]) { 331 Cookies.set('first-name', formRes["firstName"], { 332 expires: 1 333 }); 334 } 335 336 if(formRes["email"]) { 337 Cookies.set('email', formRes["email"], { 338 expires: 1 339 }); 340 } 341 342 Cookies.set('formres', JSON.stringify(formRes), { 343 expires: 1 344 }); 345 346 // add in geolocation org data (if we have it) 347 if (window.globalOrgData) { 348 formRes['orgData'] = JSON.stringify(globalOrgData); 349 if($form.find('[name="orgData"]').length == 0) { 350 $form.append('<input type="hidden" name="orgData">'); 351 } 352 353 $form.find('[name="orgData"]').val(JSON.stringify(globalOrgData)); 354 } 355 356 $form.find('[type="submit"]').addClass('activated').attr('disabled', 'disabled'); 357 358 if($form.attr("enctype") == "multipart/form-data") { 359 var data = new FormData($form[0]); 360 sendForm($form, data); 361 return false;
362 } 363 364 365 sendForm($form, formRes); 366 return false; 367 } 368 369 // actually submit the form, for real this time (async because of email validation) 370 function sendForm($form, formRes) { 371 $form = $($form); 372 373 if ($form.hasClass('download-form') && cookieController.has('booklet_downloaded')) { 374 location = formRes["download_url"]; 375 return; 376 } 377 378 var dataType = $form.attr('data-type') || "html"; 379 380 var options = { 381 url: $form.attr('action'), 382 type: $form.attr('method'), 383 dataType: dataType, 384 data: formRes, 385 success: function(data) { 386 // set coockie for download activities 387 if ($form.hasClass('download-form')) { 388 cookieController.set('booklet_downloaded', 'true', '', window.location.pathname); 389 _ga_send("Reaches", "Download", document.title); 390 location = formRes["download_url"]; 391 } else { 392 if($form.data('diasable-reach') == "true") { 393 if(window.location.pathname.startsWith("/request-info/")) { 394 _ga_send("Reaches", "Free Request", document.title); 395 } else { 396 _ga_send("Reaches", "Custom Reach", document.title); 397 } 398 } 399 400 if(dataType == "html" && data && data.split('|').length > 0) { 401 Cookies.set('personId', data.split('|')[1], { 402 expires: 1 403 }); 404 } 405 406 if($form.data('local-storage-var')) { 407 window.localStorage && localStorage.setItem($form.data('local-storage-var'), "true"); 408 } 409 410 if(dataType == "json") { 411 $(document).trigger('form-success', [$form, data]); 412 } else { 413 $(document).trigger('form-success', $form); 414 } 415 if($form.attr('data-on-success')) { 416 var path = $form.attr('data-on-success'); 417 if(path.indexOf("http") != 0) { 418 var origin = window.location.origin; 419 if(origin.lastIndexOf("/") == origin.length - 1) { 420 path = path.substring(1, path.length); 421 } 422 path = origin+ path; 423 } 424 var u = new URL(path); 425 if(globalGetParams.orgid) { 426 u.searchParams.set("orgid", globalGetParams.orgid); 427 } else { 428 var myURL = new URL(window.location.href); 429 if(myURL.searchParams.get("orgid")) { 430 u.searchParams.set("orgid", myURL.searchParams.get("orgid")); 431 } 432 } 433 location = u.toString(); 434 } 435 } 436 }, 437 error: function(xhr, status, error) { 438 var err = xhr.responseText; 439 window.console && console.error && console.error(err); 440 $form.find('[type="submit"]').removeClass('activated').removeAttr('disabled'); 441 if($form.find('.error-box').length == 0) { 442 $form.append('<div class="error-box parsley-required"></div>'); 443 } 444 $form.find('.error-box').html('Error submitting your form: ' + xhr.responseText); 445 $(document).trigger('form-error', $form); 446 } 447 }; 448 449 if($form.attr("enctype") == "multipart/form-data") { 450 options.enctype = 'multipart/form-data'; 451 options.cache = false; 452 options.contentType = false;
453 options.processData = false; 454 } 455 456 $.ajax(options); 457 458 } 459 460 $(document).bind('gcui_org_preference_set', function(e, org_data) { 461 if (org_data == null) return window.console && console.warn && console.warn('geolocation not available'); 462 463 window.globalOrgData = { 464 latitude: safeNav2(org_data, 'result.estimated_location.latitude'), 465 longitude: safeNav2(org_data, 'result.estimated_location.longitude'), 466 cont_from_org: safeNav2(org_data, 'result.items.cont'), 467 address_data_from_geolocation: { 468 area_code: safeNav2(org_data, 'result.estimated_location.area_code'), 469 city: safeNav2(org_data, 'result.estimated_location.city'), 470 country_code: safeNav2(org_data, 'result.estimated_location.country_code'), 471 postal_code: safeNav2(org_data, 'result.estimated_location.postal_code'), 472 region_code: safeNav2(org_data, 'result.estimated_location.region_code'), 473 }, 474 org_id: safeNav2(org_data, 'result.items.id'), 475 } 476 477 }); 478 479 function initGeolocation() { 480 // geolocate, cookie the result 481 var globalGeolocationData; 482 if (!globalGetParams.geoDebugIP) { 483 globalGeolocationData = cookieMonster.get('geolocated'); 484 if (globalGeolocationData) globalGeolocationData = JSON.parse(globalGeolocationData); 485 } else { 486 globalGeolocationData = null; 487 } 488 489 if (!globalGeolocationData) { 490 if (window.globalIgnoreGeolocation) return; 491 492 var ajaxData = { locale: $('html').attr('lang'), results: 50 }; 493 if (globalGetParams.geoDebugIP) ajaxData.ip_override = globalGetParams.geoDebugIP; 494 $.ajax({ 495 url: gd2Domain + '/gcui-globaldata/geolocate-api.action', 496 dataType: 'jsonp', 497 // cache: true, 498 data: ajaxData, 499 success: function(data) { 500 // logger.debug('geolocation successful'); 501 globalGeolocationData = data.result; 502 // @HACK: lighten cookies ... 503 if (typeof globalGeolocationData.items[0] != 'undefined') 504 globalGeolocationData.items = globalGeolocationData.items[0]; 505 delete globalGeolocationData.estimated_location.metro_code; 506 delete globalGeolocationData.items._adjustments; 507 delete globalGeolocationData.items._distance; 508 delete globalGeolocationData.items._matchtype; 509 delete globalGeolocationData.items.csitollfreetelephonenumber; 510 delete globalGeolocationData.items.facsimiletelephonenumber; 511 delete globalGeolocationData.items.geo_accuracy; 512 delete globalGeolocationData.items.incomm_id; 513 514 window.globalGeolocationData = globalGeolocationData; 515 cookieMonster.set('geolocated', JSON.stringify(globalGeolocationData), void 0, '/'); 516 $(document).trigger('geolocated'); 517 $(document).trigger('org-selected', globalGeolocationData.items && globalGeolocationData.items.id); 518 $(document).trigger('gcui_org_preference_set', { result: globalGeolocationData }); 519 520 521 }, 522 // error: function (e) { 523 // // logger.error('geolocation bombed'); 524 // console.error(e); 525 // } 526 error: function(xhr, status, error) { 527 var err = xhr.responseText; 528 // window.console && console.error && console.error(err); 529 } 530 }); 531 } else { 532 window.globalGeolocationData = globalGeolocationData; 533 $(document).trigger('geolocated'); 534 $(document).trigger('org-selected', globalGeolocationData.items && globalGeolocationData.items.id); 535 $(document).trigger('gcui_org_preference_set', { result: globalGeolocationData }); 536 setTimeout(function() { 537 $(document).trigger('geolocated'); 538 $(document).trigger('org-selected', globalGeolocationData.items && globalGeolocationData.items.id); 539 $(document).trigger('gcui_org_preference_set', { result: globalGeolocationData }); 540 }, 5000); 541 } 542 543 } 544 545 setTimeout(function() { 546 if (window.globalGeolocationData && $('[name="countryCode"] option').length > 0) { 547 var defaultCountry = safeNav('globalGeolocationData.estimated_location.country_code'); 548 if (defaultCountry) defaultCountry = defaultCountry.toUpperCase(); 549 $('[name="countryCode"]').val(defaultCountry);
550 updateStateList(); 551 setorgId(); 552 } else { 553 $(document).bind('geolocated', function() { 554 var defaultCountry = safeNav('globalGeolocationData.estimated_location.country_code'); 555 if (defaultCountry) defaultCountry = defaultCountry.toUpperCase(); 556 $('[name="countryCode"]').val(defaultCountry); 557 updateStateList(); 558 setorgId(); 559 }); 560 } 561 562 563 }, 500); 564 565 function setorgId() { 566 if(safeNav('globalGeolocationData.items.id') && $('.autoassign-orgid [name=orgId]').val() == "") { 567 $('.autoassign-orgid [name=orgId]').val(globalGeolocationData.items.id); 568 } 569 } 570 571 // captcha 572 var cc = 0; 573 $(document).on('keyup mouseup', function(e) { 574 if (cc >= 1) { 575 $('[name=captcha]').val('V@3fsasdfasdfAAdgf9J*'); 576 } 577 cc++; 578 }); 579 580 function initAutowiredForm($form) { 581 if(!$form.hasClass('form--skip-parsley')) { 582 $form.parsley({}).destroy(); 583 $form.parsley().on('form:validate', function(formInstance) { 584 // if (curIndex() == 0 && $form.find('.btn.selected').length == 0) { 585 // $('.invalid-form-error-message.salutation') 586 // .show() 587 // .toggleClass('filled', false); 588 589 // if($('.invalid-form-error-message.salutation').length > 0) { 590 // TweenMax.to(window, 1, { scrollTo: $('.invalid-form-error-message.salutation').position().top }); 591 // } 592 593 // formInstance.validationResult = false;
594 // } 595 }); 596 } 597 598 var $sections = $form.find('.form-section'); 599 600 601 function navigateTo(index) { 602 TweenMax.to($sections.parent().find('.current'), 0.25, { autoAlpha: 0, onComplete: switchSection, ease: Power3.easeInOut }); 603 604 $(document).trigger('formNavigation'); 605 606 function switchSection() { 607 // Mark the current section with the class 'current' 608 $sections 609 .removeClass('current') 610 .eq(index) 611 .addClass('current'); 612 TweenMax.fromTo($sections.parent().find('.current'), 0.25, { autoAlpha: 0 }, { autoAlpha: 1, ease: Power3.easeInOut }); 613 // Show only the navigation buttons that make sense for the current section: 614 $form.find('.form-navigation .previous').toggle(index > 0); 615 var atTheEnd = index >= $sections.length - 1; 616 $form.find('.form-navigation .next').toggle(!atTheEnd); 617 618 if($form.find('.form-progressbar').length) { 619 620 $form.find('.form-progressbar').children().removeClass('active'); 621 $($form.find('.form-progressbar').children()[index]).addClass('active'); 622 for(var i = 0; i<index; i++) { 623 $($form.find('.form-progressbar').children()[i]).addClass('completed'); 624 } 625 626 if (index + 1 == $sections.length) { 627 $form.find('.form-progressbar').children().addClass('completed'); 628 } 629 630 } 631 632 // scroll to the top of the form 633 $('html, body').animate({ 634 scrollTop: $form.offset().top - 200, 635 }, 1000, 'swing', function(){ 636 }); 637 } 638 639 } 640 641 642 $(document).bind('form-success', function(event) { 643 if ($sections.length > 0 && $form.attr('data-on-success') == "") { 644 navigateTo(curIndex() + 1); 645 } 646 }); 647 648 $('.form-step-label--back ').click(function(){ 649 navigateTo(curIndex() - 1); 650 }); 651 652 function curIndex() { 653 // Return the current index by looking at which section has the class 'current' 654 return $sections.index($sections.filter('.current')); 655 } 656 657 // Previous button is easy, just go back 658 $('.go-back').click(function() { 659 navigateTo(curIndex() - 1); 660 }); 661 662 // Next button goes forward iff current block validates 663 $form.find('.form-navigation .btn-next').click(function() { 664 if ($form.parsley({}).validate({ group: 'block-' + curIndex() })) { 665 navigateTo(curIndex() + 1); 666 } 667 }); 668 669 // Prepare sections by setting the `data-parsley-group` attribute to 'block-0', 'block-1', etc. 670 $sections.each(function(index, section) { 671 $(section).find(':input').attr('data-parsley-group', 'block-' + index); 672 }); 673 } 674 675 var FormHandler = (function() { 676 'use strict'; 677 678 function FormHandler() { 679 // enforces new 680 if (!(this instanceof FormHandler)) { 681 return new FormHandler(); 682 } 683 } 684 685 FormHandler.prototype.initGeolocation = initGeolocation; 686 687 FormHandler.prototype.initDatePicker = initDatePicker; 688 689 FormHandler.prototype.onSubmit = onFormSubmit; 690 691 return FormHandler; 692 }())(); 693 694 window.FormHandler = FormHandler; 695})();
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.