PageSourceSearch

https://prep.health/wp-content/plugins/hyphen-health/assets/js/script.js?ver=7.1.3

js prep.health collected 2026-10-07 15:25:33 UTC 11,417 bytes, 284 lines download raw bytes

1var airDatePickerObj, gformid, fpObj, datesArr;
2var availableDays = {};
3
4var auDate = new Date();
5var isDate = function (date) {
6    return (new Date(date) !== "Invalid Date") && !isNaN(new Date(date));
7}
8
9jQuery(document).ready(function () {
10	console.debug('setting up Hyphen script');
11    var $practiceIdInput = jQuery('.hh-practice-id-input input');
12    var $appointmentTypeIdInput = jQuery('.hh-appointment-type-id-input input');
13    var $datePicker = jQuery('.gravity-hh-date-picker');
14    var $loaderOverlay = jQuery('.hh-loader-overlay');
15    var $providerDropdown = jQuery('#hh-provider-dropdown');
16    var $providerGender = jQuery('.hh-provider-gender input[type=radio]');
17    var $providerInput = jQuery('.hh-provider-input input');
18    var $providerIdInput = jQuery('.hh-provider-id-input input');
19    var $dateTimeInput = jQuery('.hh-date-time input');
20    var $timePicker = jQuery('.gravity-hh-time-picker');
21    var $form = jQuery('.gform_wrapper form');
22    var $humanDateInput = jQuery('.hh-human-date-input input');
23    var $humanTimeInput = jQuery('.hh-human-time-input input');
24
25    function checkCalendarShow() {
26        if ($practiceIdInput.val() && $appointmentTypeIdInput.val()) {
27            $datePicker.show();
28            fetchAndDisplayTime(); // Call the function to fetch and display time
29            if (Object.keys(availableDays).length === 0) {
30                fetchAvailableDates($practiceIdInput.val(), function () {
31                    setAvailableDates();
32                });
33            } else {
34                setAvailableDates();
35            }
36
37        } else {
38            $datePicker.hide();
39        }
40    }
41
42    function fetchAndDisplayTime() {
43        // Get the current time
44        const currentTime = new Date();
45    
46        // Convert to a string with specified options
47        const timeString = currentTime.toLocaleTimeString('en-AU', {
48            hour: '2-digit',
49            minute: '2-digit',
50            timeZone: 'Australia/Sydney',
51            hour12: true
52        });
53    
54        document.getElementById('current-time').textContent = timeStr
54ing;
55    }
56    
57    fetchAndDisplayTime();
58
59    // Set up a 10-second interval to update the time
60    setInterval(fetchAndDisplayTime, 10000);
61
62    function checkEnableDisableSubmitButton() {
63        var $submitButton = jQuery('#gform_' + gformid + ' input[type=submit]');
64        if ($practiceIdInput.val().length && $appointmentTypeIdInput.val().length && $dateTimeInput.val().length) {
65            $submitButton.removeAttr('disabled');
66        } else {
67            $submitButton.attr('disabled', 'disabled');
68        }
69    }
70
71    function getProviders(change = false) {
72        $loaderOverlay.show();
73        $providerInput.val("");
74        $providerIdInput.val("");
75        $dateTimeInput.val("");
76
77        jQuery.get(hh_ajax.resturl + 'get-providers', { practiceId: $practiceIdInput.val(), gender: $providerGender.filter(':checked').val(), _: new Date().getTime() }, function (data) {
78            var providersOptions = '<option value="">Any Doctor</option>';
79            jQuery(data).each(function (index, item) {
80                providersOptions += '<option value="' + item.id + '">' + item.name + '</option>';
81            });
82            $providerDropdown.html(providersOptions);
83            $loaderOverlay.hide();
84            if (fpObj && fpObj.length && !change) {
85                fpObj.setDate(new Date());
86				console.debug('fpObj found for setDate');
87            }else{
88				console.debug('fpObj missing for setDate, no date set');
89			}
90
91            checkEnableDisableSubmitButton();
92            checkCalendarShow();
93            //$providerDropdown.trigger('change');
94        });
95    }
96
97    function getAvailableSlots(date, source = false) {
98        if (date instanceof Date || isDate(date)) {
99            $loaderOverlay.show();
100            var gender = $providerGender.filter(':checked').val();
101            date = date instanceof Date ? date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate() : date;
102            jQuery.get(hh_ajax.resturl + 'available-booking-slots', { date: date, practiceId: $practiceIdInput.val(), providerId: $providerIdInput.val(), _: new Date().getTime() }, function (data) {
103                var slots = "<div class='hh-booking-slots-wrap'>";
104                if (data.length === 0) {
105                    slots += "<div class='no-appointments-message' style='text-align:center; font-weight: bold; padding: 20px;'>No available appointments on this day. Please select another day.</div>";
106                } else {
107                    data.forEach(function (provider) {
108                        slots += "<div class='hh-provider-name gender-specific gender-" + provider.gender + "'>Doctor Name : " + provider.name + "</div>";
109                        slots += "<ul class='hh-booking-slots gender-specific gender-" + provider.gender + "'>";
110                        jQuery(provider['data']).each(function (_, item) {
111                            slots += "<li><button type='button' class='hh-booking-slots-button gender-specific gender-" + provider.gender + "' data-providerid='" + item.providerId + "' data-providername='" + item.providerName + "' data-timestamp='" + item.timestamp + "' data-value='" + item.dateTime + "' data-date='" + item.date + "' data-time='" + item.time + "' >" + item.time + "</button></li>";
112                        });
113                        slots += "</ul>";
114                    });
115                }
116                slots += "</div>";
117
118                $timePicker.html(slots);
119                if (gender == 1 || gender == 2) {
120                    jQuery('.gender-specific').hide();
121                    jQuery('.gender-' + gender).show();
122                }
123                $timePicker.show();
124                $loaderOverlay.hide();
125                checkEnableDisableSubmitButton();
126            });
127        }
128    }
129
130
131    function fetchAvailableDates(practiceId, callback) {
132        jQuery.get(hh_ajax.resturl + 'get-available-days', { practiceId: practiceId, _: new Date().getTime() }, function (data) {
133            availableDays = data; // Store the fetched data in the global variable
134            if (typeof callback === 'function') {
135                callback();
136            }
137        });
138    }
139
140    function setAvailableDates() {
141        var providerId = $providerIdInput.val();
142
143        var availableDaysForProvider = (providerId && availableDays[providerId] && availableDays[providerId]['availableDays']) ? availableDays[providerId]['availableDays'] : availableDays['all']['availableDays'];
144        var firstAvailableDate = (providerId && availableDays[providerId] && availableDays[providerId]['firstDate']) ? availableDays[providerId]['firstDate'] : availableDays['all']['firstDate'];
145
146		if(!fpObj){
147			console.debug('fpObj does not exist yet');
148			console.debug(fpObj);
149			return;
150		}else{
151			console.debug('fpObj exists');
152		}
153        fpObj.config.disable = [function (date) {
154            return (!availableDaysForProvider.includes(date.getDay()));
155        }];
156
157        var currentDate = fpObj.selectedDates.length ? fpObj.selectedDates[0] : false;
158        fpObj.redraw();
159        $loaderOverlay.hide();
160        $timePicker.hide();
161
162        if (availableDaysForProvider.length) {
163            fpObj.setDate(firstAvailableDate, true);
164            getAvailableSlots(firstAvailableDate, 'onReady');
165
166            // var $selectedDay = jQuery(".flatpickr-day").not('.flatpickr-disabled').eq(0);
167            // var enabledDateOfMonth = $selectedDay.attr('aria-label');
168
169            // if (fpObj.selectedDateElem.classList.contains('flatpickr-disabled') || !fpObj.selectedDates.length) {
170            //     fpObj.setDate(enabledDateOfMonth, true, "Y-m-d");
171            //     $selectedDay.addClass('selected');
172            //     getAvailableSlots(enabledDateOfMonth, 'onReady');
173            // } else {
174            //     fpObj.setDate(currentDate, true);
175            //     $selectedDay.addClass('selected');
176            //     getAvailableSlots(currentDate, 'onReady');
177            // }
178        }
179    }
180
181    if ($practiceIdInput.length) {
182        gformid = $form.attr('data-formid');
183        checkEnableDisableSubmitButton();
184        getProviders();
185    }
186
187    jQuery('#gform_' + gformid).submit(function () {
188        $loaderOverlay.show();
189    });
190
191    jQuery(document).on('gform_post_render', function (event, formId) {
192        if (jQuery('#gform_' + formId + ' .gfield_error').length > 0) {
193            $loaderOverlay.hide();
194        }
195    });
196
197    jQuery(document).on('gform_confirmation_loaded', function (event, formId) {
198        $loaderOverlay.hide();
199    });
200
201    $providerGender.change(function () {
202        getProviders();
203    });
204
205    jQuery('#hh-practice-dropdown').ready(function () {
206        $datePicker.hide();
207        $timePicker.hide();
208        $loaderOverlay.show();
209        $providerDropdown.html('<option value="">Any Provider</option>');
210    });
211
212    jQuery('#hh-appointment-dropdown').change(function () {
213        var $this = jQuery(this);
214        jQuery('.hh-appointment-type-input input').val($this.find('option:selected').text());
215        jQuery('.hh-appointment-type-id-input input').val($this.val());
216        checkCalendarShow();
217        $providerGender.trigger('change');
218    });
219
220    jQuery('#hh-practice-dropdown').change(function () {
221        var $this = jQuery(this);
222        jQuery('.hh-practice-input input').val($this.find('option:selected').text());
223        jQuery('.hh-practice-id-input input').val($this.val());
224        checkCalendarShow();
225    });
226
227    jQuery('#hh-provider-dropdown').change(function () {
228        var $this = jQuery(this);
229        jQuery('.hh-provider-input input').val($this.find('option:selected').text());
230        jQuery('.hh-provider-id-input input').val($this.val());
231        $dateTimeInput.val("");
232        $loaderOverlay.show();
233        checkCalendarShow();
234    });
235
236    jQuery('body').on('click', '.hh-booking-slots-button', function () {
237        var $this = jQuery(this);
238        jQuery('.hh-booking-slots-button').removeClass('hh-booking-slots-button-selected');
239        $this.addClass('hh-booking-slots-button-selected');
240        $dateTimeInput.val($this.data('value'));
241        $humanDateInput.val($this.data('date'));
242        $humanTimeInput.val($this.data('time'));
243        $providerIdInput.val($this.data('providerid'));
244        $providerInput.val($this.data('providername'));
245        $providerDropdown.val($this.data('providerid'));
246        checkEnableDisableSubmitButton();
247    });
248
249	if(flatpickr==undefined){
250		console.debug('flatpickr is not loaded yet, ignoring date picker');
251					  console.debug(flatpickr);
252	}else{
253		console.debug('flatpickr is loaded');
254		fpObj = jQuery('.gravity-hh-date-picker-input').flatpickr({
255			inline: true,
256			minDate: auDate,
257			defaultDate: auDate,
258			ariaDateFormat: "Y-m-d",
259			locale: {
260				firstDayOfWeek: 1
261			},
262			onReady: function () {
263				$dateTimeInput.val("");
264				checkEnableDisableSubmitButton();
265			},
266			onChange: function (date) {
267				$dateTimeInput.val("");
268				getAvailableSlots(date[0], 'onchange');
269				checkEnableDisableSubmitButton();
270			},
271			onMonthChange: function () {
272				applyCustomStyles();
273			}
274		});
275	}
276});
277
278// Function to apply custom styles
279function applyCustomStyles() {
280    jQuery('.flatpickr-day.selected').css({
281        'background-color': '#000000',
282        'border-color': '#000000',
283    });
284}

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.