PageSourceSearch

https://www.citybin.com/wp-content/themes/citybinbrochure/js/citybin-signup.js?ver=1790386678

js citybin.com collected 2026-09-26 01:38:17 UTC 21,999 bytes, 515 lines download raw bytes

1jQuery(document).ready(function () {
2    function setCookie(name, value, hours) {
3        const date = new Date();
4        date.setTime(date.getTime() + (hours * 60 * 60 * 1000));
5        const expires = "expires=" + date.toUTCString();
6        document.cookie = name + "=" + encodeURIComponent(value) + ";" + expires + ";path=/";
7    }
8
9    function getCookie(name) {
10        const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
11        return match ? decodeURIComponent(match[2]) : null;
12    }
13
14    const params = new URLSearchParams(window.location.search);
15    const gclid = params.get('gclid');
16
17    if (gclid) {
18        setCookie('gclid', gclid, 24); // expires in 24 hours
19    }
20
21    //step1 select any price plan
22    jQuery('.citybin-loader-wrapper').removeClass('active');
23    jQuery(document).on('click', '.get_this_plan', function () {
24        const id = jQuery(this).data("id");
25        const planid = jQuery(this).data("planid");
26        const price = jQuery("#item_" + id).find('.card-price').html() ? jQuery("#item_" + id).find('.card-price').html() : '';
27        const title = jQuery("#item_" + id).find('.card-title').html();
28        const img = jQuery("#item_" + id).find('.card-image').attr('src');
29        let period = jQuery("#item_" + id).find('.card-period').html() ? jQuery("#item_" + id).find('.card-period').html() : '';
30        let period_text = jQuery("#item_" + id).find('.card-period-text').html() ? jQuery("#item_" + id).find('.card-period-text').html() : '';
31        let plan_period = '';
32        if (period == 'per month') {
33            plan_period = 1;
34        } else if (period == 'per year') {
35            plan_period = 12;
36        }
37        if (price == '') {
38            //jQuery('.iban_field_column').hide();
39            jQuery(".selected_plan_details").find('.plan_period').hide();
40        } else {
41            jQuery('.iban_field_column').show();
42            jQuery(".selected_plan_details").find('.plan_period').show();
43        }
44        jQuery(".selected_plan_details").find('.plan_title').html(title);
45        jQuery(".selected_plan_details").find('.plan_price').html(price);
46        jQuery(".selected_plan_details").find('.plan_period').html(period_text);
47        jQuery(".selected_plan_details").find('img').attr('src', img);
48        jQuery("#selected_plan_id").val(planid);
49        jQuery("#selected_plan_title").val(title);
50        jQuery("#selected_plan_price").val(price);
51        jQuery("#selected_plan_period").val(plan_period);
52        jQuery(".page-title").html('Your Details');
53        jQuery("#step1").hide();
54        jQuery("#step2").show();
55    });
56    // goback from current step
57    jQuery(document).on('click', '.goback', function () {
58        const id = jQuery(this).data("id");
59        const back = jQuery(this).data("back");
60        jQuery('#' + id).hide();
61        jQuery('#' + back).show();
62        if (back == 'step1') {
63            jQuery(".page-title").html('Sign Up - Select a plan');
64        }
65    });
66
67    jQuery.validator.addMethod("pattern", function (value, element) {
68        return this.optional(element) || /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{1,}$/.test(value);
69    }, "Your email address must be in the format [email protected].");
70
71    // Apply user detail
72    jQuery("#step2-form").validate({
73        rules: {
74            firstName: {
75                required: true
76            },
77            surname: {
78                required: true
79            },
80            mobileNumber: {
81                required: true,
82                digits: true,
83                minlength: 6,
84                maxlength: 12
85            },
86            email: {
87                required: true,
88                email: true,
89                pattern: true
90            },
91            iban: {
92                /*required: function () {
93                    return jQuery(".plan_price").html() !== ""; // required only if price has value
94                },
95                iban: function () {
96                    return jQuery(".plan_price").html() !== ""; // required only if price has value
97                },*/
98                required: true,
99                iban: true
100            },
101            /*yourAddress: {
102                required: true
103            },*/
104            address1: {
105                required: true
106            },
107            address2: {
108                required: true
109            }
110        },
111        messages: {
112            mobileNumber: {
113                digits: "Only numeric values are allowed for mobile numbers.",
114                minlength: "Mobile number must be at least 6 digits.",
115                maxlength: "Mobile number cannot exceed 12 digits."
116            },
117            email: {
118                email: "Your email address must be in the format [email protected].",
119                pattern: "Your email address must be in the format [email protected]."
120            },
121            /*yourAddress: {
122                required: "Your address is needed to complete the process."
123            },*/
124            address1: {
125                required: "Address 1 is required."
126            }
127        },
128        errorElement: "div",
129        errorPlacement: function (error, element) {
130            error.addClass("error-message");
131            error.insertAfter(element);
132        },
133        submitHandler: function (form) {
134        }
135    });
136
137    jQuery(document).on('click', '.select_payment_method', function () {
138        var isValid = true;
139        var id = jQuery(this).attr('id');
140        // Check each input
141        jQuery("#step2-form input").each(function () {
142            if (!jQuery(this).valid()) {
143                isValid = false;
144            }
145        });
146
147        if (isValid) {
148            var selected_plan_title = jQuery('#selected_plan_title').val();
149            var selected_plan_period = jQuery('#selected_plan_period').val();
150            var plan_period_txt = '';
151            if (selected_plan_period == 1) {
152                var plan_period_txt = 'each month';
153            } else {
154                var plan_period_txt = 'each year';
155            }
156            let sign_up_confirmation_text = citybin_object.sign_up_confirmation_text;
157            sign_up_confirmation_text = sign_up_confirmation_text.replace('##PLANNNAME##', selected_plan_title);
158            sign_up_confirmation_text = sign_up_confirmation_text.replace('##PLANMONTH##', plan_period_txt);
159            jQuery('.sign_up_confirmation_text').html(sign_up_confirmation_text);
160            jQuery('.sign_up_pop-up').css('display', 'flex');
161        }
162    });
163    jQuery(document).on('click', '#confirm_signup', function () {
164        const form1Data = jQuery('#step1-form').serializeArray();
165        const form2Data = jQuery('#step2-form').serializeArray();
166
167        const allData = [...form1Data, ...form2Data];
168        const serializedData = jQuery.param(allData);
169        jQuery('body').addClass('loading');
170        jQuery('.citybin-loader-wrapper').addClass('active');
171        var gclid = getCookie('gclid') ? getCookie('gclid') : '';
172        jQuery.ajax({
173            url: citybin_object.ajax_url,
174            type: 'POST',
175            data: serializedData + '&action=user_info_store&nonce=' + citybin_object.nonce + '&gclid=' + gclid,
176            success: function (response) {
177                if (response.success) {
178                    if (response.data.ref_id) {
179                        window.location.href = citybin_object.thank_you_url + '/?ref_id=' + response.data.ref_id;
180                    }
181                    //jQuery('#step2').hide();
182                    //jQuery('#step4').show();
183                } else {
184                    alert('Error: ' + response.data.error);
185                    jQuery('#step2').find('.top-error-message').html(response.data.error).show();
186                }
187                jQuery('body').removeClass('loading');
188                jQuery('.citybin-loader-wrapper').removeClass('active');
189            },
190            error: function (xhr, status, error) {
191                jQuery('#step2').find('.top-error-message').html(response.data.error).show();
192                jQuery('body').removeClass('loading');
193                jQuery('.citybin-loader-wrapper').removeClass('active');
194            }
195        });
196    });
197
198    // Extend jQuery Validate with custom methods
199    jQuery.validator.addMethod("iban", function (value, element) {
200        return this.optional(element) || /^[A-Z]{2}\d{2}[A-Z0-9]{18}$/.test(value);
201    }, "Please enter a valid IBAN.");
202
203    jQuery.validator.addMethod("swift", function (value, element) {
204        return this.optional(element) || /^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$/.test(value);
205    }, "Please enter a valid SWIFT/BIC code.");
206
207    jQuery.validator.addMethod("bankName", function (value, element) {
208        return this.optional(element) || /^[A-Za-z\s\.\,\-]{3,50}$/.test(value);
209    }, "Please enter a valid bank name.");
210
211    jQuery.validator.addMethod("accountHolder", function (value, element) {
212        return this.optional(element) || /^[A-Za-z\s\.\-]{3,50}$/.test(value);
213    }, "Please enter a valid account holder name.");
214
215    jQuery('.direct_bank_payment_method_details').find('.top-error-message').html('').hide();
216    // Apply validation for bank form
217    jQuery("#bankDetailsForm").validate({
218        rules: {
219            iban: {
220                required: true,
221                iban: true
222            },
223            bankName: {
224                required: true,
225                bankName: true
226            },
227            swift: {
228                required: true,
229                swift: true
230            },
231            accountHolder: {
232                required: true,
233                accountHolder: true
234            }
235        },
236        messages: {
237            iban: {
238                required: "IBAN is required."
239            },
240            bankName: {
241                required: "Bank name is required."
242            },
243            swift: {
244                required: "SWIFT/BIC code is required."
245            },
246            accountHolder: {
247                required: "Account holder name is required."
248            }
249        },
250        errorElement: "div",
251        errorPlacement: function (error, element) {
252            error.addClass("error-message");
253            error.insertAfter(element);
254        },
255        submitHandler: function (form) {
256            alert("Validation successful!");
257        }
258    });
259
260    // bank detail validation and form submit
261    jQuery(document).on('click', '#bank_detail_form', function () {
262        var isValid = true;
263        var id = jQuery(this).attr('id');
264        // Check each input
265        jQuery("#bankDetailsForm input").each(function () {
266            if (!jQuery(this).valid()) {
267                isValid = false;
268            }
269        });
270
271        if (isValid) {
272            const form1Data = jQuery('#step1-form').serializeArray();
273            const form2Data = jQuery('#step2-form').serializeArray();
274            const allData = [...form1Data, ...form2Data];
275            const serializedData = jQuery.param(allData);
276
277            jQuery('body').addClass('loading');
278            jQuery('.citybin-loader-wrapper').addClass('active');
279            jQuery.ajax({
280                url: citybin_object.ajax_url,
281                type: 'POST',
282                data: serializedData + '&action=user_info_store&nonce=' + citybin_object.nonce,
283                success: function (response) {
284                    if (response.success) {
285                        jQuery('#thank-you-message').html(response.data.message);
286                        jQuery('#step2').hide();
287                        jQuery('#step5').show();
288                    } else {
289                        alert('Error: ' + response.data.error);
290                        jQuery('.direct_bank_payment_method_details').find('.top-error-message').html(response.data.error).show();
291                    }
292                    jQuery('body').removeClass('loading');
293                    jQuery('.citybin-loader-wrapper').removeClass('active');
294                },
295                error: function (xhr, status, error) {
296                    jQuery('.direct_bank_payment_method_details').find('.top-error-message').html(response.data.error).show();
297                    jQuery('body').removeClass('loading');
298                    jQuery('.citybin-loader-wrapper').removeClass('active');
299                }
300            });
301
302        } else {
303        }
304    });
305
306    // Apply validation for referral code apply form
307    jQuery("#referralCodeApply").validate({
308        rules: {
309            accountNumber: {
310                required: true,
311                digits: true,
312            }
313        },
314        messages: {
315            accountNumber: {
316                required: "Account Number is required.",
317                digits: "Please add valid refrence no."
318            }
319        },
320        errorElement: "div",
321        errorPlacement: function (error, element) {
322            error.addClass("error-message");
323            error.insertAfter(element);
324        },
325        submitHandler: function (form) {
326        }
327    });
328
329    //validation for referral code
330    jQuery(document).on('click', '.get_referral_code', function () {
331        var isValid = true;
332        var id = jQuery(this).attr('id');
333        // Check each input
334        jQuery("#referralCodeApply input").each(function () {
335            if (!jQuery(this).valid()) {
336                isValid = false;
337            }
338        });
339
340        if (isValid) {
341            jQuery('body').addClass('loading');
342            jQuery('.citybin-loader-wrapper').addClass('active');
343            const accountNumber = jQuery('#accountNumber').val();
344            jQuery('.top-error-message').html('');
345            jQuery.ajax({
346                url: citybin_object.ajax_url,
347                type: 'POST',
348                data: 'accountNumber=' + accountNumber + '&action=verify_ref_id&nonce=' + citybin_object.nonce,
349                success: function (response) {
350                    jQuery('.citybin-loader-wrapper').removeClass('active');
351                    if (response.success) {
352                        jQuery('.your_referral_code').html(response.data.refferal_code);
353                        jQuery('.refer_friends').hide();
354                        jQuery('.citybin-loader-wrapper').removeClass('active');
355                        jQuery('.referral_code_section').show();
356                    } else {
357                        alert('Error: ' + response.data.error);
358                        jQuery('.top-error-message').html(response.data.error).show();
359
360                    }
361                    jQuery('body').removeClass('loading');
362                },
363                error: function (xhr, status, error) {
364                    jQuery('.top-error-message').html(response.data.error).show();
365                    jQuery('body').removeClass('loading');
366                    jQuery('.citybin-loader-wrapper').removeClass('active');
367                }
368            });
369        }
370    });
371
372    //read more less
373    jQuery(document).on("click", ".read-more-btn", function () {
374        const index = jQuery(this).data("index");
375        const $shortDesc = jQuery("#short-desc-" + index);
376        const $fullDesc = jQuery("#full-desc-" + index);
377        console.log("#full-desc-" + index);
378        if ($fullDesc.css("display") === "none") {
379            $fullDesc.show();
380            $shortDesc.hide();
381            jQuery(this).text("Read Less");
382        } else {
383            $fullDesc.hide();
384            $shortDesc.show();
385            jQuery(this).text("Read More");
386        }
387    });
388});
389
390jQuery(document).on('click', '.pop-up-close', function (e) {
391    e.preventDefault();
392    console.log('poup closed');
393    jQuery('.sign_up_pop-up').hide();
394});
395
396jQuery(document).ready(function ($) {
397    $(document).on('keydown', function (event) {
398        if ($('.sign_up_pop-up').length > 0 && event.key === "Escape") {
399            $('.sign_up_pop-up').hide();
400        }
401    });
402});
403
404jQuery(document).on('click', '.filter_city_item', function () {
405    jQuery('.filter_city_item').removeClass('active');
406    jQuery(this).addClass('active');
407    var city = jQuery(this).data('city');
408    jQuery('.city-tabs').removeClass('active');
409    jQuery('#' + city + '.city-tabs').addClass('active');
410});
411//Postcode Found, address populated below.  
412var $ = jQuery.noConflict();
413$(function () {
414    $("#autoAddress").AutoAddress({
415        key: citybin_object.auto_address_api_key,
416        vanityMode: true,
417        width: "auto",
418        placeHolderLabel: "Start typing your Address or Eircode here",
419        searchButtonLabel: "Confirm Address",
420        addressFoundLabel: "Eircode Found, address populated below.",
421        inputRequiredLabel: "Enter a full address or Eircode to begin your search.",
422        onFocus() {
423            $("#autoAddress").find('.autoaddress-options-msg.error').remove();
424            jQuery('.autoAddressmsg').find('.autoaddress-options-msg').hide();
425        },
426        onLookupError: function () {
427            //console, log('Check errors');
428            jQuery('.autoAddressmsg').find('.autoaddress-options-msg.error').html(jQuery('#autoAddress').find('.autoaddress-options-msg').html());
429            jQuery('.autoAddressmsg').find('.autoaddress-options-msg.error').show();
430        },
431        onAddressFound: function (data) {
432            jQuery('.autoAddressmsg').find('.autoaddress-options-msg').hide();
433            let selectedCity = jQuery('li.filter_city_item.active').html();
434            var city = data.input.address;
435            if (city.includes(selectedCity) && selectedCity != '') {
436                if (data.addressId) {
437                    var settings = {
438                        "url": citybin_object.api_endpoint_for_household_info + citybin_object.auto_address_api_key + "&ecadId=" + data.addressId,
439                        "method": "GET",
440                        "timeout": 0,
441                    };
442
443                    $.ajax(settings).done(function (response) {
444                        if (response.isServicedArea == true) {
445                            if (data.vanityAddress) {
446                                jQuery('.autoaddress-text-box').val(data.vanityAddress);
447                            }
448                            if (data.postcode) {
449                                jQuery('#eircode').val(data.postcode);
450                            }
451                            /*if (data.vanityAddress[0]) {
452                                jQuery('#houseNumber').val(data.vanityAddress[0]);
453                            }*/
454
455                            if (data.vanityAddress[0]) {
456                                jQuery('#address1').val(data.vanityAddress[0]);
457                            }
458
459                            if (data.vanityAddress[1]) {
460                                jQuery('#address2').val(data.vanityAddress[1]);
461                            }
462
463                            if (data.vanityAddress[2]) {
464                                jQuery('#address3').val(data.vanityAddress[2]);
465                            }
466                            const address_input = jQuery('.autoaddress-text-box').val();
467                            if (address_input != '') {
468                                jQuery('.autoAddressmsg').find('.autoaddress-options-msg.success').html(jQuery('#autoAddress').find('.autoaddress-options-msg').html());
469                                jQuery('.autoAddressmsg').find('.autoaddress-options-msg.success').show();
470                            }
471                        } else {
472                            jQuery('#eircode,#address1,#address2,#address3').val('');
473                            jQuery('.autoAddressmsg').find('.autoaddress-options-msg.info').html('<a href="#" tabindex="-1" class="autoaddress-close-msg"></a><span></span>Location not served.');
474                            jQuery('.autoAddressmsg').find('.autoaddress-options-msg.info').show();
475                        }
476                    });
477                } else {
478                    jQuery('#eircode,#address1,#address2,,#address3').val('');
479                    jQuery('.autoAddressmsg').find('.autoaddress-options-msg.error').html(jQuery('#autoAddress').find('.autoaddress-options-msg').html());
480                    jQuery('.autoAddressmsg').find('.autoaddress-options-msg.error').show();
481                }
482            } else {
483                jQuery('#eircode,#address1,#address2,#address3').val('');
484                jQuery('.autoAddressmsg').find('.autoaddress-options-msg.info').html('<a href="#" tabindex="-1" class="autoaddress-close-msg autoaddress-for-other-city-close"></a><span></span>Please choose a plan in your area. - <a href="#" type="button" class="btn goback btn-danger" data-back="step1" data-id="step2"><b>
484Change Plan</b></a>');
485                jQuery('.autoAddressmsg').find('.autoaddress-options-msg.info').show();
486            }
487
488            //
489            /*jQuery('#address1').val(data.reformattedAddress[0]);
490            jQuery('#address2').val(data.reformattedAddress[1]);
491            if (data.reformattedAddress[0] == null && data.reformattedAddress[1] == null) {
492                jQuery('#address1').val(data.reformattedAddress[2]);
493            }
494            else {
495                jQuery('#address3').val(data.reformattedAddress[2]);
496            }
497            jQuery('#address4').val(data.reformattedAddress[3]);
498            jQuery('#eircode').val(data.postcode);*/
499        }
500    });
501    jQuery(document).on('click', '.autoaddress-button', function () {
502        const address_input = jQuery('.autoaddress-text-box').val();
503
504        if (address_input == '') {
505            jQuery('#eircode,#address1,#address2').val('');
506            //jQuery('.autoAddressmsg').find('.autoaddress-options-msg.error').html();
507            jQuery('.autoAddressmsg').find('.autoaddress-options-msg.info').hide();
508        }
509    });
510
511    $(document).on('click', '.autoaddress-close-msg', function (e) {
512        e.preventDefault();
513        $(this).parent('.autoaddress-options-msg').hide();
514    });
515});

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.