﻿$(document).ready(function () {
    var newsletterSignUp = new NewsletterSignUp();
    newsletterSignUp.init();
});

function NewsletterSignUp() {

    var init = function () {
        var signupElement = $('.newsletter-signup-form');

        if (signupElement.length == 0)
            return;

        var data = JSON2.parse(signupElement.find('script.config')[0].innerHTML);

        if (data && data[0]) {
            signupElement.find('#brand').val(data[0].config.defaultbrand);
        }

        $("#dob").datepicker({
            dateFormat: 'mm/dd/yy',
            changeMonth: true,
            changeYear: true,
            yearRange: 'c-100:+0',
            maxDate: '-1m',
            autoSize: true,
            constrainInput: true,
            defaultDate: '-18y'
        });

        //Newsletter signup
        $(".newsletter-signup-link").fancybox({
            'href': '#newsletter-signup-popout',
            'onStart': function () {
                $("#newsletter-signup-popout-input").show();
                $("#newsletter-signup-popout-success").hide();
                $("#newsletter-signup-popout-error").hide();
                $("#newsletter-signup-popout-loading").hide();
            }
        });

        $("#backtoinput").click(function (event) {
            var errorElement = $(this).closest('#newsletter-signup-popout-error');
            errorElement.fadeOut(400);
            var inputElement = errorElement.siblings('#newsletter-signup-popout-input');
            inputElement.fadeIn(400);
        });

        $("#newsletter-signup-popout .xSubmit").click(function (event) {

            var emailElement = $("#newsletter-signup-popout #email");
            var brandElement = $("#newsletter-signup-popout #brand");
            var countryElement = $("#newsletter-signup-popout #country");

            var postdata = {};
            postdata.email = emailElement.val();
            postdata.phone = $("#newsletter-signup-popout #phone").val();
            postdata.firstname = $("#newsletter-signup-popout #firstname").val();
            postdata.lastname = $("#newsletter-signup-popout #lastname").val();
            postdata.postalcode = $("#newsletter-signup-popout #postalcode").val();
            postdata.gender = $("input[name=gender]:checked").val();
            if (!postdata.gender)
                postdata.gender = $("#newsletter-signup-popout .gender").val();
            postdata.country = $("#newsletter-signup-popout #country").val();
            postdata.storeid = $("#newsletter-signup-popout .localstore").val();
            postdata.shopid = postdata.storeid;
            postdata.defaultbrand = data[0].config.defaultbrand;
            postdata.brand = brandElement.val();
            postdata.dob = $("#newsletter-signup-popout #dob").val();

            var inputElement = $(this).closest('#newsletter-signup-popout-input');

            var IsPostDataValid = true;

            if (!IsElementValid(postdata.email)) {
                emailElement.siblings("span").show();
                emailElement.siblings().addClass("xformvalidator");
                IsPostDataValid = false;
            }
            else {
                emailElement.siblings("span").hide();
                emailElement.siblings().removeClass("xformvalidator");
            }

            if (!IsElementValid(postdata.country)) {
                countryElement.siblings("span").show();
                countryElement.siblings().addClass("xformvalidator");
                IsPostDataValid = false;
            }
            else {
                countryElement.siblings("span").hide();
                countryElement.siblings().removeClass("xformvalidator");
            }

            if (!IsElementValid(postdata.brand)) {
                brandElement.siblings("span").show();
                brandElement.siblings().addClass("xformvalidator");
                IsPostDataValid = false;
            }
            else {
                brandElement.siblings("span").hide();
                brandElement.siblings().removeClass("xformvalidator");
            }

            if (!IsPostDataValid) {
                inputElement.find(".newsletter-errormessage").show();
                return;
            }

            inputElement.hide();
            var loadingElement = inputElement.siblings('#newsletter-signup-popout-loading');
            loadingElement.show();

            var successElement = inputElement.siblings('#newsletter-signup-popout-success');
            var errorElement = inputElement.siblings('#newsletter-signup-popout-error');

            $.ajax({
                type: 'POST',
                url: 'NewsletterSignup.axd',
                data: 'signupdata=' + Url.encode(JSON2.stringify(postdata)),
                success: function (resp) {
                    loadingElement.hide();
                    if (resp && resp == 'true') {
                        // Special case for Companys. Defined in vt-newsletter-addition.js
                        if (typeof (DontClearSignupFields) === 'undefined') {
                            $('#newsletter-signup-popout-input input[type=text]').each(function (i) {
                                this.value = '';
                            });
                            $('#newsletter-signup-popout-input select').each(function (i) {
                                this.value = '';
                            });
                            $('#newsletter-signup-popout-input input[type=radio]').each(function (i) {
                                this.checked = false;
                            });
                            $('#newsletter-signup-popout-input input[type=checkbox]').each(function (i) {
                                this.checked = false;
                            });
                        }
                        successElement.fadeIn(300);
                    }
                    else
                        errorElement.fadeIn(300);
                },
                error: function () {
                    loadingElement.hide();
                    errorElement.fadeIn(300);
                    return "Error";
                }
            });
        });
    }

    var IsElementValid= function (element) {
        if (element) {
            if (element.length > 0)
                return true;
            return false;
        }
        return false;
    }

    return { init: init };
}
