PageSourceSearch

https://www.scientology-denmark.org/js-static/routes/forms.js

js scientology-denmark.org collected 2026-10-07 19:59:58 UTC 27,948 bytes, 695 lines download raw bytes

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.