PageSourceSearch

https://www.promontoryclub.com/wp-content/uploads/code-snippets/1649.js?v=8719

js promontoryclub.com collected 2026-09-26 02:26:49 UTC 19,386 bytes, 410 lines download raw bytes

1/******* Do not edit this file *******
2Code Snippets Manager
3Saved: Jul 02 2026 | 23:37:34 */
4jQuery(document).ready(function($) {
5
6    /*
7    ===================================
8    HOMESITES AND HOMES PAGES
9    ===================================
10    */
11    function removeDuplicateListings() {
12        var featuredListingsIDs = new Set();
13
14        // Extract unique showcaseIDs from featured-listings
15        jQuery('.featured-listings .IDX-showcaseCell .IDX-showcaseListingID').each(function() {
16            featuredListingsIDs.add(jQuery(this).text().trim());
17        });
18
19        // Remove duplicate listings from mls-listings
20        jQuery('.mls-listings .IDX-showcaseCell').each(function() {
21            var listingID = jQuery(this).find('.IDX-showcaseListingID').text().trim();
22            if (featuredListingsIDs.has(listingID)) {
23                //console.log('Removing featured-listing ID #' + listingID, ' from mls-listing');
24                jQuery(this).remove(); // Remove duplicate listing
25            }
26        });
27    }
28    if (jQuery('.featured-listings').length) { removeDuplicateListings(); }
29
30
31
32
33    /*
34    ===================================
35    SEARCH TOOL
36    ===================================
37    */    
38    var isIDXPage = false;
39    if ($('#IDX-main').length) { isIDXPage = true; }
40
41    // Add Dropdowns
42    var search_minPriceHomesField = `
43        <ul class="selectDropdown" style="display: none;">
44            <li data-fieldvalue="">Any</li>
45            <li data-fieldvalue="1,000,000">1,000,000</li>
46            <li data-fieldvalue="1,500,000">1,500,000</li>
47            <li data-fieldvalue="2,000,000">2,000,000</li>
48            <li data-fieldvalue="2,500,000">2,500,000</li>
49            <li data-fieldvalue="3,000,000">3,000,000</li>
50            <li data-fieldvalue="3,500,000">3,500,000</li>
51            <li data-fieldvalue="4,000,000">4,000,000</li>
52            <li data-fieldvalue="4,500,000">4,500,000</li>
53            <li data-fieldvalue="5,000,000">5,000,000</li>
54            <li data-fieldvalue="6,000,000">6,000,000</li>
55            <li data-fieldvalue="7,000,000">7,000,000</li>
56            <li data-fieldvalue="8,000,000">8,000,000</li>
57            <li data-fieldvalue="9,000,000">9,000,000</li>
58            <li data-fieldvalue="10,000,000">10,000,000</li>
59            <li data-fieldvalue="11,000,000">11,000,000</li>
60            <li data-fieldvalue="12,000,000">12,000,000</li>
61            <li data-fieldvalue="13,000,000">13,000,000</li>
62            <li data-fieldvalue="14,000,000">14,000,000</li>
63            <li data-fieldvalue="15,000,000">15,000,000</li>
64            <li data-fieldvalue="16,000,000">16,000,000</li>
65            <li data-fieldvalue="17,000,000">17,000,000</li>
66            <li data-fieldvalue="18,000,000">18,000,000</li>
67        </ul>
68    `;
69    var search_maxPriceHomesField = `
70        <ul class="selectDropdown" style="display: none;">
71            <li data-fieldvalue="">Any</li>
72            <li data-fieldvalue="1,500,000">1,500,000</li>
73            <li data-fieldvalue="2,000,000">2,000,000</li>
74            <li data-fieldvalue="2,500,000">2,500,000</li>
75            <li data-fieldvalue="3,000,000">3,000,000</li>
76            <li data-fieldvalue="3,500,000">3,500,000</li>
77            <li data-fieldvalue="4,000,000">4,000,000</li>
78            <li data-fieldvalue="4,500,000">4,500,000</li>
79            <li data-fieldvalue="5,000,000">5,000,000</li>
80            <li data-fieldvalue="6,000,000">6,000,000</li>
81            <li data-fieldvalue="7,000,000">7,000,000</li>
82            <li data-fieldvalue="8,000,000">8,000,000</li>
83            <li data-fieldvalue="9,000,000">9,000,000</li>
84            <li data-fieldvalue="10,000,000">10,000,000</li>
85            <li data-fieldvalue="11,000,000">11,000,000</li>
86            <li data-fieldvalue="12,000,000">12,000,000</li>
87            <li data-fieldvalue="13,000,000">13,000,000</li>
88            <li data-fieldvalue="14,000,000">14,000,000</li>
89            <li data-fieldvalue="15,000,000">15,000,000</li>
90            <li data-fieldvalue="16,000,000">16,000,000</li>
91            <li data-fieldvalue="17,000,000">17,000,000</li>
92            <li data-fieldvalue="18,000,000">18,000,000</li>
93        </ul>
94    `;
95    var search_minPriceHomesitesField = `
96        <ul class="selectDropdown" style="display: none;">
97            <li data-fieldvalue="">Any</li>
98            <li data-fieldvalue="500,000">500,000</li>
99            <li data-fieldvalue="600,000">600,000</li>
100            <li data-fieldvalue="700,000">700,000</li>
101            <li data-fieldvalue="800,000">800,000</li>
102            <li data-fieldvalue="900,000">900,000</li>
103            <li data-fieldvalue="1,000,000">1,000,000</li>
104            <li data-fieldvalue="1,500,000">1,500,000</li>
105            <li data-fieldvalue="2,000,000">2,000,000</li>
106            <li data-fieldvalue="2,500,000">2,500,000</li>
107            <li data-fieldvalue="3,000,000">3,000,000</li>
108            <li data-fieldvalue="3,500,000">
1083,500,000</li>
109            <li data-fieldvalue="4,000,000">4,000,000</li>
110            <li data-fieldvalue="4,500,000">4,500,000</li>
111            <li data-fieldvalue="5,000,000">5,000,000</li>
112            <li data-fieldvalue="6,000,000">6,000,000</li>
113            <li data-fieldvalue="7,000,000">7,000,000</li>
114            <li data-fieldvalue="8,000,000">8,000,000</li>
115            <li data-fieldvalue="9,000,000">9,000,000</li>
116            <li data-fieldvalue="10,000,000">10,000,000</li>
117            <li data-fieldvalue="11,000,000">11,000,000</li>
118            <li data-fieldvalue="12,000,000">12,000,000</li>
119            <li data-fieldvalue="13,000,000">13,000,000</li>
120            <li data-fieldvalue="14,000,000">14,000,000</li>
121            <li data-fieldvalue="15,000,000">15,000,000</li>
122            <li data-fieldvalue="16,000,000">16,000,000</li>
123            <li data-fieldvalue="17,000,000">17,000,000</li>
124            <li data-fieldvalue="18,000,000">18,000,000</li>
125        </ul>
126    `;
127    var search_maxPriceHomesitesField = `
128        <ul class="selectDropdown" style="display: none;">
129            <li data-fieldvalue="">Any</li>
130            <li data-fieldvalue="600,000">600,000</li>
131            <li data-fieldvalue="700,000">700,000</li>
132            <li data-fieldvalue="800,000">800,000</li>
133            <li data-fieldvalue="900,000">900,000</li>
134            <li data-fieldvalue="1,000,000">1,000,000</li>
135            <li data-fieldvalue="1,500,000">1,500,000</li>
136            <li data-fieldvalue="2,000,000">2,000,000</li>
137            <li data-fieldvalue="2,500,000">2,500,000</li>
138            <li data-fieldvalue="3,000,000">3,000,000</li>
139            <li data-fieldvalue="3,500,000">3,500,000</li>
140            <li data-fieldvalue="4,000,000">4,000,000</li>
141            <li data-fieldvalue="4,500,000">4,500,000</li>
142            <li data-fieldvalue="5,000,000">5,000,000</li>
143            <li data-fieldvalue="6,000,000">6,000,000</li>
144            <li data-fieldvalue="7,000,000">7,000,000</li>
145            <li data-fieldvalue="8,000,000">8,000,000</li>
146            <li data-fieldvalue="9,000,000">9,000,000</li>
147            <li data-fieldvalue="10,000,000">10,000,000</li>
148            <li data-fieldvalue="11,000,000">11,000,000</li>
149            <li data-fieldvalue="12,000,000">12,000,000</li>
150            <li data-fieldvalue="13,000,000">13,000,000</li>
151            <li data-fieldvalue="14,000,000">14,000,000</li>
152            <li data-fieldvalue="15,000,000">15,000,000</li>
153            <li data-fieldvalue="16,000,000">16,000,000</li>
154            <li data-fieldvalue="17,000,000">17,000,000</li>
155            <li data-fieldvalue="18,000,000">18,000,000</li>
156            <li data-fieldvalue="19,000,000">19,000,000</li>
157            <li data-fieldvalue="20,000,000">20,000,000</li>
158        </ul>
159    `;
160
161    // Make values load from Saved Link
162    var search_idxLink = 'https://realestatelistings.promontoryclub.com/i/promontory-search-results';
163
164    var search_propType = '';
165    var urlQueryArray = {};
166
167    $('#idxaddons-omnisearch-form').each(function() {
168        console.log('SEARCH TOOL: Initializing Search Tool v.20');
169
170        // Vars
171        var searchTool = $(this);
172
173        // Add Area Limit
174        searchTool.attr('action', search_idxLink);
175
176        if ( isIDXPage ) {
177
178            // Get URL parameters
179            var query = window.location.search.substring(1);
180            var vars = query.split('&');
181            for (var i = 0; i < vars.length; i++) {
182                var pair = vars[i].split('=');
183                urlQueryArray[pair[0]] = decodeURIComponent(pair[1]);
184            }
185            console.log('SEARCH TOOL: URL Parameters: ', urlQueryArray);
186        }
187
188        // Change labels text
189        $('label[for="iaofMinPrice"]', this).text('Price (min)');
190        $('label[for="iaofMaxPrice"]', this).text('Price (max)');
191        $('label[for="iaofBeds"]', this).text('Bedrooms (min)');
192        $('label[for="iaofBaths"]', this).text('Bathrooms (min)');
193
194        
195        // Open dropdowns
196        $('.selectContainer').on('click', function(e) {
197            //console.log('SEARCH TOOL: SelectContainer click', e.target.tagName);
198
199            // Check if clicked element is an li
200            if (e.target.tagName == 'LI') return;
201
202            // Close all other dropdowns
203            var otherDropdowns = $('.selectContainer').not(this);
204            otherDropdowns.removeClass('activeContainer');
205            otherDropdowns.find('.selectDropdown').hide();
206            //console.log('SEARCH TOOL: Closing all other dropdowns');
207
208            if ($(this).hasClass('activeContainer')) {
209                // Close dropdown
210                $(this).removeClass('activeContainer');
211                $('.selectDropdown', this).hide();
212            } else {
213                // Open dropdown
214                $(this).addClass('activeContainer');
215                $('.selectDropdown', this).show();
216            }
217
218            e.stopPropagation();
219        });
220
221        // Select option
222        $(document).on('click', '.selectContainer li', function(e) {
223            e.stopPropagation(); // Stop the click event from propagating to the .selectContainer
224
225            // console.log('SEARCH TOOL: li click', e.target.tagName);
226
227            var optionSelected = $(this).data('fieldvalue');
228            // console.log('SEARCH TOOL: Option Selected: ', optionSelected);
229
230            // Set value
231            var targetInput = $(this).closest('.selectContainer').find('input');
232            targetInput.attr('value', optionSelected);
233            targetInput.val(optionSelected);
234            // console.log('SEARCH TOOL: Price Selected: ', targetInput.val());
235
236            // Close dropdown
237            $(this).closest('.selectContainer').find('.selectDropdown').hide();
238            $(this).closest('.selectContainer').removeClass('activeContainer');
239            // console.log('SEARCH TOOL: Closing dropdowns after selection');
240        });
241
242        // Close dropdowns when clicking outside
243        $(document).on('click', function(e) {
244            // console.log('SEARCH TOOL: body click', e.target.tagName);
245
246            // Check if clicked element is an li
247            if ($(e.target).closest('.selectContainer').length === 0) {
248                $('.selectContainer').removeClass('activeContainer');
249                $('.selectContainer .selectDropdown').hide();
250                // console.log('SEARCH TOOL: Closing dropdowns');
251            }
252        });
253
254        
255        // Add Property Type field
256        if ( $('body').hasClass('page-id-279') || $('body').hasClass('page-id-2573') ) { // Homes
257            addPtField('1', searchTool);
258            generateFields('#iaofMinPriceContainer', search_minPriceHomesField);
259            generateFields('#iaofMaxPriceContainer', search_maxPriceHomesField);
260
261        } else if ( $('body').hasClass('page-id-280') ) { // Homesites
262            addPtField('2', searchTool);
263            generateFields('#iaofMinPriceContainer', search_minPriceHomesitesField);
264            generateFields('#iaofMaxPriceContainer', search_maxPriceHomesitesField);
265
266        } else if ( isIDXPage ) {
267            if ( typeof queryArray.pt !== 'undefined') { 
268                // PT field already exists
269                console.log('SEARCH TOOL: PT field already exists: ', queryArray.pt );
270                addPtField( queryArray.pt, searchTool);
271
272                if (queryArray.pt == '1') { // Homes
273                    generateFields('#iaofMinPriceContainer', search_minPriceHomesField);
274                    generateFields('#iaofMaxPriceContainer', search_maxPriceHomesField);
275                } else { // Homesites or other
276                    generateFields('#iaofMinPriceContainer', search_minPriceHomesitesField);
277                    generateFields('#iaofMaxPriceContainer', search_maxPriceHomesitesField);
278                }
279            
280            } else if ( searchTool.find('input[name="pt"]').length > 0 ) {
281                // PT field exists
282                console.log('SEARCH TOOL: PT field exists, ', $(this).find('input[name="pt"]').val() );
283
284                if ( $(this).find('input[name="pt"]').val() == '1' ) { // Homes
285                    addPtField( '1', searchTool);
286                    generateFields('#iaofMinPriceContainer', search_minPriceHomesField);
287                    generateFields('#iaofMaxPriceContainer', search_maxPriceHomesField);
288                } else if ( $(this).find('input[name="pt"]').val() == '2' ) { // Homesites
289                    addPtField( '2', searchTool);
290                    generateFields('#iaofMinPriceContainer', search_minPriceHomesitesField);
291                    generateFields('#iaofMaxPriceContainer', search_maxPriceHomesitesField);
292                }
293
294            } else if ( $(this).find('input[name="pt"]').length == 0 ) { // Homesites
295                // console.log('SEARCH TOOL: PT field does not exist, setting to Homesites');
296                addPtField( '2', searchTool);
297                generateFields('#iaofMinPriceContainer', search_minPriceHomesitesField);
298                generateFields('#iaofMaxPriceContainer', search_maxPriceHomesitesField);
299            }
300        } else { // Homesites
301            // console.log('SEARCH TOOL: PT field does not exist, setting to Homesites');
302            addPtField( '2', searchTool);
303            generateFields('#iaofMinPriceContainer', search_minPriceHomesitesField);
304            generateFields('#iaofMaxPriceContainer', search_maxPriceHomesitesField);
305        }
306
307        // Add Acres fields
308        $('button[aria-label="Search"]', this).before(`<div id="iaofAcresMinContainer" class="selectContainer"><label for="iaofAcres">Acres (min)</label><input id="iaofAcres" type="text" name="amin_acres" value="${ urlQueryArray.amin_acres ? urlQueryArray.amin_acres : ''}"></div>`);
309        $('button[aria-label="Search"]', this).before(`<div id="iaofAcresMaxContainer" class="selectContainer"><label for="iaofAcresMax">Acres (max)</label><input id="iaofAcresMax" type="text" name="amax_acres" value="${ urlQueryArray.amax_acres ? urlQueryArray.amax_acres : '' }"></div>`);
310        // Remove duplicated acres hidden fields if they exist
311        $('input[name="amin_acres"][type="hidden"]').remove();
312        $('input[name="amax_acres"][type="hidden"]').remove();
313
314        // Convert fields to number
315        convertFieldsToNumber('#iaofBedsContainer');
316        convertFieldsToNumber('#iaofBathsContainer');
317        convertFieldsToNumber('#iaofAcresMinContainer');
318        convertFieldsToNumber('#iaofAcresMaxContainer');
319        
320        // Remove input name="consent_status" if it exists
321        var consentStatusField = $(`input[name="consent_status"]`);
322        if (consentStatusField.length) {
323            console.log('SEARCH TOOL: Removing consent status field');
324            consentStatusField.remove();
325        }
326
327        // Submit form
328        searchTool.on('submit', function(e) {
329            e.preventDefault();
330
331            // Temporarily unbind the submit event to avoid infinite recursion
332            searchTool.off('submit');
333
334            // Only send fields with values
335            searchTool.find('input, select').each(function() {
336                let field = $(this);
337
338                // If field is empty, remove the name attribute
339                if ( field.val() === '' ) {
340                    field.attr('name', '');
341                }
342            });
343
344            // Submit form
345            searchTool.submit();
346        });
347    });
348	
349    function generateFields(fieldId, dropdownVar) {
350        $(fieldId).addClass('selectContainer');
351        $(fieldId).find('input').after(dropdownVar);
352    }
353
354    function addPtField( ptValue, searchID ) {
355        // Check PT Value and Add corresponding title to the page
356        var ptName = 'other';
357        if (ptValue == '1') {
358            ptName = 'homes';
359            $('#IDX-resultsMainTitle .elementor-heading-title').text('Promontory Luxury Homes');
360
361        } else if (ptValue == '2') {
362            ptName = 'homesites';
363            $('#IDX-resultsMainTitle .elementor-heading-title').text('Promontory Luxury Homesites');
364        }
365        // console.log('SEARCH TOOL: ', ptName);
366
367        // Add PT class to searchID and body
368        search_propType = ptName;
369        searchID.addClass(ptName);
370        $('body').addClass(ptName);
371
372        // Add Property Type field
373        if (searchID.find('input[name="pt"]').length == 0) {
374            searchID.prepend('<input type="hidden" name="pt" value="' + ptValue + '" id="IDX-pt" class="custom-field" />');
375            console.log('SEARCH TOOL: Added PT field: ', ptValue);
376        } else {
377            searchID.find('input[name="pt"]').remove();
378            searchID.prepend('<input type="hidden" name="pt" value="' + ptValue + '" id="IDX-pt" class="custom-field" />');
379            console.log('SEARCH TOOL: Added PT field: ', ptValue);
380        }
381    }
382
383    function convertFieldsToNumber(fieldId) {
384        $(fieldId).removeClass('selectContainer').addClass('numberContainer');
385        //$(fieldId).find('input').attr('type', 'number')
386
387        // Add min attribute to 0
388        $(fieldId).find('input').attr('min', 0);
389
390        // Add increment and decrement buttons
391        $(fieldId).find('input').after('<div class="increment"></div><div class="decrement"></div>');
392
393        // Increment and decrement buttons
394        $(fieldId).find('.increment').on('click', function() {
395            var inputField = $(this).siblings('input');
396            var value = 0;
397            if (inputField.val() != '') value = parseInt(inputField.val()); //console.log(value);
398
399            inputField.val(value + 1);
400        });
401        $(fieldId).find('.decrement').on('click', function() {
402            var inputField = $(this).siblings('input');
403            var value = 0;
404            if (inputField.val() != '') value = parseInt(inputField.val()); //console.log(value); 
405
406            if (value > 0) { inputField.val(value - 1); }
407        });
408    }
409
410});

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.