﻿var ss = ss || {};
ss.controls = ss.controls || {};
ss.controls.profileForm = (function() {
    var stateDropdownReady = false;
    var setState = null;

    $(document).ready(function() {
        stateDropdownReady = false;
        common.populateStateDropdown($('#cust_state'), setStateReady);
    });

    function setStateReady() {
        if (setState !== null) {
            $('#cust_state option').each(function() {
                if ($(this).val() != setState) {
                    $(this).remove();
                }
            });
        }
        stateDropdownReady = true;
    }

    function getValue(controlID) {
        return $("#" + controlID).val().replace(/(<([^>]+)>)/g, "");
    }

    function getPhoneValue(controlID) {
        return $("#" + controlID).val().replace(/\D/g, '');
    }

    function isEmailUnique(emailAddress) {
        var email_exists = false;
        var check_email_request = {
            EmailAddress: emailAddress
        };

        $.ajax({
            url: '/Service.asmx/CustomerAccountDoesNotAlreadyExist',
            type: 'POST',
            async: false,
            datatype: 'json',
            timeout: 10000,
            data: JSON.stringify(check_email_request),
            contentType: 'application/json; charset=utf-8',
            success: function(res) {
                email_exists = JSON.parse(res);
            },
            error: customError
        });
        return email_exists;
    }

    function customError() {
        if (common.inStore()) {
            display_error_message();
        }
        else {
            error_response();
        }
    }

    function validateForm() {
        var isValid = true;
        $('.validate').hide();
        if (common.hasInvalidRequiredControls(false)) {
            $('.invalid').eq(0).focus();
            $('.invalid').each(function() {
                $("label[id^='" + $(this).attr('id') + "']").show();
            });

            isValid = false;
        }

        if (location.href.match(/CreateAccount/i) || (/.*Registration.aspx/.test(document.location))) {
            if (!isEmailUnique($('#cust_email').val())) {
                if (common.inStore()) {
                    $('#errorSignInLink').attr("href", "/Home/Store/StoreLoginRegistration.aspx");
                }
                $('#alt_cust_email_warning').show();
                isValid = false;
            } else {
                $('#alt_cust_email_warning').hide();
            }
        }

        if (location.href.match(/EditProfile/i)) {
            var account = AjaxManager.Customer.getAccount();
            var currentEmail = account.EmailAddress
            if ($('#cust_email').val() != currentEmail) {
                if (!isEmailUnique($('#cust_email').val())) {
                    $('#alt_cust_email_warning').show();
                    isValid = false;
                }
                else {
                    $('#alt_cust_email_warning').hide();
                }
            }
            else {
                $('#alt_cust_email_warning').hide();
            }
        }

        if ($('#cust_email').parent().parent().css('display') !== 'none'
			&& $('#cust_email').val() !== $('#cust_email_confirm').val()) {

            $('#alt_cust_email_confirm_warning').show();
            isValid = false;
        } else {
            $('#alt_cust_email_confirm_warning').hide();
        }

        if ($('#cust_pass').parent().parent().css('display') !== 'none'
			&& $('#cust_pass').val() !== $('#cust_pass_confirm').val()) {

            $('#cust_pass_confirm_warning').show();
            isValid = false;
        } else {
            $('#cust_pass_confirm_warning').hide();
        }

        return isValid;
    }

    return {
        mask: function(control) {
            if (common.mask(control)) {
                $('#alt_' + $(this).attr('id') + '_warning').hide();
            } else {
                $('#alt_' + $(this).attr('id') + '_warning').show();
            }
        },
        validate: function() {
            return validateForm();
        },
        setMaxLength: function(control, e, maxLength) {
            var isValid = true;
            var txt = document.getElementById(control.id);
            var sel = common.getTextBoxSelection(txt);

            if (($(control).val().length >= maxLength) && e.keyCode > 47 && e.keyCode < 58) {
                //allow user to highlight/replace
                if (sel.length == 0) {
                    isValid = false;
                }
            }
            return isValid;
        },
        addressControls: {
            setVisible: function(isVisible) {
                if (isVisible) {
                    $('table .profile_address').show();
                } else {
                    $('table .profile_address').hide();
                    $('table .profile_address input').removeClass('required');
                    $('table .profile_address select').removeClass('required');
                    $('table .profile_address input').removeClass('requiredZip');
                    $('table .profile_address input').removeClass('requiredPhone');
                    
                }
            },
            makeCityStateZipReadonly: function() {
                $('#cust_state').attr("disabled", true);
                $('#cust_zip').attr("disabled", true);
                $('#cust_city').attr("disabled", true);
            }
        },
        accountControls: {
            setVisible: function(isVisible) {
                if (isVisible) {
                    $('table .profile_account').show();
                } else {
                    $('table .profile_account').hide();
                    $('table .profile_account input').removeClass('required');
                }
            }

        },
        setPasswordRequired: function(required) {
            if (required) {
                $('#cust_pass').addClass('required');
            } else {
                $('#cust_pass').removeClass('required');
            }
        },
        getFirstName: function() {
            return getValue('cust_first');
        },
        setFirstName: function(value) {
            $('#cust_first').val(value);
        },
        getLastName: function() {
            return getValue('cust_last');
        },
        setLastName: function(value) {
            $('#cust_last').val(value);
        },
        getPhoneNumberOne: function() {
            return getPhoneValue('cust_phone');
        },
        setPhoneNumberOne: function(value) {
            $('#cust_phone').val(value);
        },
        getPhoneNumberTwo: function() {
            return getPhoneValue('cust_alt_phone');
        },
        setPhoneNumberTwo: function(value) {
            $('#cust_alt_phone').val(value);
        },
        getAddressLineOne: function() {
            return getValue('cust_addr1');
        },
        setAddressLineOne: function(value) {
            $('#cust_addr1').val(value);
        },
        getAddressLineTwo: function() {
            return getValue('cust_addr2');
        },
        setAddressLineTwo: function(value) {
            $('#cust_addr2').val(value);
        },
        getCity: function() {
            return getValue('cust_city');
        },
        setCity: function(value) {
            $('#cust_city').val(value);
        },
        getState: function() {
            return getValue('cust_state');
        },
        setState: function(value) {
            setState = value;
            if (stateDropdownReady) {
                $('#cust_state option').each(function() {
                    if ($(this).val() != setState) {
                        $(this).remove();
                    }
                });
            } else {
                common.populateStateDropdown($('#cust_state'), function() {
                    stateDropdownReady = true;
                    $('#cust_state option').each(function() {
                        if ($(this).val() != setState) {
                            $(this).remove();
                        }
                    });
                });
            }
        },
        getZip: function() {
            return getValue('cust_zip');
        },
        setZip: function(value) {
            $('#cust_zip').val(value);
        },
        getEmailAddress: function() {
            return getValue('cust_email');
        },
        setEmailAddress: function(value) {
            $('#cust_email').val(value);
            $('#cust_email_confirm').val(value);
        },
        getPassword: function() {
            return getValue('cust_pass');
        },
        setPassword: function(value) {
            $('#cust_pass').val(value);
            $('#cust_pass_confirm').val(value);
        },
        getAccountName: function() {
            return getValue('cust_account_name');
        },
        setAccountName: function(value) {
            $('#cust_account_name').val(value);
        },
        getOptInEmail: function() {
            if ($('input[name=cust_opt_in_email]').attr('checked')) {
                return true;
            }
            else {
                return false;
            }
        },
        setOptInEmail: function(value) {
            $('input[name=cust_opt_in_email]').attr('checked', value);
        }
    }
})();
