emailCapture.js 1.8 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
define(['jquery', 'domReady!'], function ($) {
    'use strict';

    /**
     * Email validation
     * @param {String} sEmail
     * @returns {Boolean}
     */
    function validateEmail(sEmail) {
        var filter
            = /^([+\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;

        return filter.test(sEmail);
    }

    /**
     * Email capture for checkout
     * @param {String} url
     *
     */
    function emailCaptureCheckout(url) {
        var previousEmail = '';
        $('body').on('blur', 'input[id=customer-email]', function () {
            var email = $(this).val();

            if (email === previousEmail) {
                return false;
            }

            if (email && validateEmail(email)) {
                previousEmail = email;
                $.post(url, {
                    email: email
                });
            }
        });
    }

    /**
     * Email capture for newsletter field
     * @param {String} url
     */
    function emailCaptureNewsletter(url) {
        $('input[id=newsletter]').each(function (index, element) {
            // Observe onblur event on element
            $(element).on('blur', function () {
                var email = $(element).val();

                if (email && validateEmail(email)) {
                    $.post(url, {
                        email: email
                    });
                }
            });
        });
    }

    /**
     * Exported/return email capture
     * @param {Object} emailCapture
     */
    return function (emailCapture) {
        if (emailCapture.type === 'checkout') {
            emailCaptureCheckout(emailCapture.url);
        }

        if (emailCapture.type === 'newsletter') {
            emailCaptureNewsletter(emailCapture.url);
        }
    };
});