var glob_woosub_mobile;
var glob_woosub_code;
var glob_woosub_email;
var glob_woosub_mobile_email;
var glob_woosub_input_type;

jQuery(document).ready(function ($) {

    
    // زمانی که کلید enter زده شود
    $('.woosub_body_inner input[type="tel"], .woosub_body_inner input[type="text"], .woosub_body_inner input[type="email"]').on('keydown', function(e) {
        if (e.key === 'Enter') {
            e.preventDefault(); // جلوگیری از رفتار پیش‌فرض enter
            // پیدا کردن المان woosub_submit_form داخل همین woosub_body_inner
            $(this).closest('.woosub_body_inner').find('.woosub_submit_form').trigger('click');
        }
    });


    // checkboxed toggle
    $('.inp-woosubcbx').change(function() {
        $(this).attr("checked", !$(this).attr("checked"));
    });
    $('input.inp-woosubcbx.minprice').change(function() {
        $(this).parent('.woosubchk_wrapper').siblings('.hminprice').toggleClass('woosub_hidden');
    });

    $('.hminprice').keyup(function(evt) {
        var price = woosub_number_format($(this).val(), 0, ',', ',');
        $(this).val(price);
    });
    
    function woosub_number_format (number, decimals, dec_point, thousands_sep) {
        // Strip all characters but numerical ones.
        number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
        var n = !isFinite(+number) ? 0 : +number,
            prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
            sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
            dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
            s = '',
            toFixedFix = function (n, prec) {
                var k = Math.pow(10, prec);
                return '' + Math.round(n * k) / k;
            };
        // Fix for IE parseFloat(0.55).toFixed(0) = 0;
        s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
        if (s[0].length > 3) {
            s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
        }
        if ((s[1] || '').length < prec) {
            s[1] = s[1] || '';
            s[1] += new Array(prec - s[1].length + 1).join('0');
        }
        return s.join(dec);
    }

    
    //popup handler
    $(".woosubmodaltrigger").on("click", function() {
        var modalId = $(this).attr("data-id");
        $('.woosubmodal').filter(function() {
            return $(this).data('id') === modalId;
        }).show();
    });
    $(".woosubmodalclose").on("click", function() {
        $(this).closest(".woosubmodal").css("display", "none");
    });
    $(window).on("click", function(event) {
        if ($(event.target).hasClass("woosubmodal")) {
            $(event.target).css("display", "none");
        }
    });


    // accordion handler
    var acc = document.getElementsByClassName("woosubaccordion");
    var i;

    for (i = 0; i < acc.length; i++) {
    acc[i].addEventListener("click", function() {
        this.classList.toggle("woosubactive");
        var panel = this.nextElementSibling;
        if (panel.style.display === "block") {
        panel.style.display = "none";
        } else {
        panel.style.display = "block";
        }
    });
    }

    // register checkbox
    $('.hfield_wrapper.hfield_wrapper_register .hregister_text').on('click', function(){
        var checkbox = $(this).siblings('.hregister_checkbox');
        checkbox.prop("checked", !checkbox.prop("checked"));
    });

    // send otp code - mobile trigger
    $('.woosub_two_field .hmobile').keypress(function (e) {
        var key = e.which;
        if(key == 13)  // the enter key code
        {
            $(this).parent('.woosub_two_field').siblings('.woosub_send_mobile_code').click();
            return false;  
        }
    });


    // delete user subscription
    $('.woosub_del_sub_icon').on('click', function(e) {
        e.preventDefault();
        var delete_btn = $(this);
        var sub_id = delete_btn.attr('data-id');
        var user_id = $('#woosub_subscriptions_table').attr('data-userid');

        if (!woosub_check_is_number(sub_id)) {
            woosub_show_error('اشتراک نامعتبر است');
            return;
        }

        if (!woosub_check_is_number(user_id)) {
            woosub_show_error('کاربر نامعتبر است');
            return;
        }
        
        jQuery.ajax({
            url: woosub_options.ajaxurl,
            type: 'POST',
            data: {
                action : 'woosub_delete_user_subscription',
                subid : sub_id,
                userid : user_id,
                security: woosub_options.wsdeletesubscriptionnonce,
            },
            beforeSend: function() {
                delete_btn.closest('#woosub_subscriptions_table').siblings('.woosub_loader_wrapper').addClass('woosubshowloader');
                delete_btn.closest('#woosub_subscriptions_table').addClass('woosubblur');
            },
            success: function(response) {
                if (response.success) {
                    woosub_show_success(response.data.message);
                    delete_btn.closest('#woosub_subscriptions_table').siblings('.woosub_loader_wrapper').removeClass('woosubshowloader');
                    delete_btn.closest('#woosub_subscriptions_table').removeClass('woosubblur');
                    delete_btn.closest('tr').fadeOut().remove();
                    if ( $('#woosub_subscriptions_table tbody tr').length == 0 ) {
                        $('#woosub_subscriptions_table').remove();
                    }
                } else {
                    woosub_show_error(response.data.message);
                }
            },
            complete: function() {
                delete_btn.closest('#woosub_subscriptions_table').siblings('.woosub_loader_wrapper').removeClass('woosubshowloader');
                delete_btn.closest('#woosub_subscriptions_table').siblings('.woosub_loader_wrapper').removeClass('woosubblur');
            }
        });
    });


    // send otp code - mobile
    $('.woosub_send_mobile_code').on('click', function(e) {
        e.preventDefault();

        var master_wrapper = $(this).closest('.woosub_body_outer').attr('id');
        var send_mobile_code = $(this);
        var _mobile = send_mobile_code.siblings('.woosub_two_field').find('.hmobile').val();

        if (!woosub_is_mobile(_mobile)) {
            woosub_show_error('شماره موبایل وارد شده نامعتبر است');
            return;
        }
        glob_woosub_mobile = _mobile;
        jQuery.ajax({
            url: woosub_options.ajaxurl,
            type: 'POST',
            data: {
                action : 'woosub_send_sms',
                mobile : _mobile,
                security: woosub_options.wssendcodenonce,
            },
            beforeSend: function() {
                woosub_show_loading(master_wrapper);
            },
            success: function(response) {
                if (response.success) {
                    woosub_show_success(response.data.message);
                    send_mobile_code.parent('.hfield_wrapper_mobile').hide();
                    send_mobile_code.parent('.hfield_wrapper_mobile').siblings('.hfield_wrapper_verify_mobile').addClass('woosubflex');
                    send_mobile_code.parent('.hfield_wrapper_mobile').siblings('.hfield_wrapper_verify_mobile').find('.hmobileconfirm').focus();
                } else {
                    woosub_show_error(response.data.message);
                }
            },
            complete: function() {
                woosub_hide_loading(master_wrapper);
            }
        });
    });

    // verify otp code - mobile trigger
    $('.woosub_two_field .hmobileconfirm').keypress(function (e) {
        var key = e.which;
        if(key == 13)  // the enter key code
        {
            $(this).parent('.woosub_two_field').siblings('.woosub_verify_mobile_code').click();
            return false;  
        }
    });

    // verify otp code - mobile
    $('.woosub_verify_mobile_code').on('click', function(e) {
        e.preventDefault();

        var master_wrapper = $(this).closest('.woosub_body_outer').attr('id');
        var verify_otp_code = $(this);
        var _code = verify_otp_code.siblings('.woosub_two_field').find('.hmobileconfirm').val();

        if (!woosub_check_is_number(_code)) {
            woosub_show_error('کد تایید وارد شده نامعتبر است');
            return;
        }
        glob_woosub_code = _code;
        jQuery.ajax({
            url: woosub_options.ajaxurl,
            type: 'POST',
            data: {
                action : 'woosub_verify_code',
                mobile : glob_woosub_mobile,
                code : _code,
                security: woosub_options.wsverifycodenonce,
            },
            beforeSend: function() {
                woosub_show_loading(master_wrapper);
            },
            success: function(response) {
                if (response.success) {
                    woosub_show_success(response.data.message);
                    verify_otp_code.parent('.hfield_wrapper_verify_mobile').hide();
                    verify_otp_code.parent('.hfield_wrapper_verify_mobile').removeClass('woosubflex');
                    verify_otp_code.parent('.hfield_wrapper_verify_mobile').siblings('.hfield_wrapper_verified_mobile').addClass('woosubflex');
                    verify_otp_code.parent('.hfield_wrapper_verify_mobile').siblings('.hfield_wrapper_verified_mobile').find('.hmobileconfirmed').val(glob_woosub_mobile);
                    verify_otp_code.parent('.hfield_wrapper_verify_mobile').siblings('.hfield_wrapper_verified_mobile').find('.hmobilechecksum').val(response.data.checksum);
                } else {
                    woosub_show_error(response.data.message);
                }
            },
            complete: function() {
                woosub_hide_loading(master_wrapper);
            }
        });
    });

    // send otp code - email trigger
    $('.woosub_two_field .hemail').keypress(function (e) {
        var key = e.which;
        if(key == 13)  // the enter key code
        {
            $(this).parent('.woosub_two_field').siblings('.woosub_send_email_code').click();
            return false;  
        }
    });

    // send otp code - email
    $('.woosub_send_email_code').on('click', function(e) {
        e.preventDefault();

        var master_wrapper = $(this).closest('.woosub_body_outer').attr('id');
        var send_email_code = $(this);
        var _email = send_email_code.siblings('.woosub_two_field').find('.hemail').val();

        if ( ! woosub_is_email(_email) ) {
            woosub_show_error('ایمیل وارد شده نامعتبر است');
            return;
        }
        glob_woosub_email = _email;
        jQuery.ajax({
            url: woosub_options.ajaxurl,
            type: 'POST',
            data: {
                action : 'woosub_send_email_code',
                email : _email,
                security: woosub_options.wssendcodeemailnonce,
            },
            beforeSend: function() {
                woosub_show_loading(master_wrapper);
            },
            success: function(response) {
                if (response.success) {
                    woosub_show_success(response.data.message);
                    send_email_code.parent('.hfield_wrapper_email').hide();
                    send_email_code.parent('.hfield_wrapper_email').siblings('.hfield_wrapper_verify_email').addClass('woosubflex');
                    send_email_code.parent('.hfield_wrapper_email').siblings('.hfield_wrapper_verify_email').find('.hemailconfirm').focus();
                } else {
                    woosub_show_error(response.data.message);
                }
            },
            complete: function() {
                woosub_hide_loading(master_wrapper);
            }
        });
    });

    
    // verify otp code - email trigger
    $('.woosub_two_field .hemailconfirm').keypress(function (e) {
        var key = e.which;
        if(key == 13)  // the enter key code
        {
            $(this).parent('.woosub_two_field').siblings('.woosub_verify_email_code').click();
            return false;  
        }
    });

    // verify otp code - email
    $('.woosub_verify_email_code').on('click', function(e) {
        e.preventDefault();

        var master_wrapper = $(this).closest('.woosub_body_outer').attr('id');
        var verify_email_otp_code = $(this);
        var _code = verify_email_otp_code.siblings('.woosub_two_field').find('.hemailconfirm').val();

        if (!woosub_check_is_number(_code)) {
            woosub_show_error('کد تایید وارد شده نامعتبر است');
            return;
        }
        glob_woosub_code = _code;
        jQuery.ajax({
            url: woosub_options.ajaxurl,
            type: 'POST',
            data: {
                action : 'woosub_verify_email_code',
                email : glob_woosub_email,
                code : _code,
                security: woosub_options.wsverifycodeemailnonce,
            },
            beforeSend: function() {
                woosub_show_loading(master_wrapper);
            },
            success: function(response) {
                if (response.success) {
                    woosub_show_success(response.data.message);
                    verify_email_otp_code.parent('.hfield_wrapper_verify_email').hide();
                    verify_email_otp_code.parent('.hfield_wrapper_verify_email').removeClass('woosubflex');
                    verify_email_otp_code.parent('.hfield_wrapper_verify_email').siblings('.hfield_wrapper_verified_email').addClass('woosubflex');
                    verify_email_otp_code.parent('.hfield_wrapper_verify_email').siblings('.hfield_wrapper_verified_email').find('.hemailconfirmed').val(glob_woosub_email);
                    verify_email_otp_code.parent('.hfield_wrapper_verify_email').siblings('.hfield_wrapper_verified_email').find('.hemailchecksum').val(response.data.checksum);
                } else {
                    woosub_show_error(response.data.message);
                }
            },
            complete: function() {
                woosub_hide_loading(master_wrapper);
            }
        });
    });


    // send otp code - email | mobile trigger
    $('.woosub_two_field .hmobileemail').keypress(function (e) {
        var key = e.which;
        if(key == 13)  // the enter key code
        {
            $(this).parent('.woosub_two_field').siblings('.woosub_send_mobileemail_code').click();
            return false;  
        }
    });

    // send otp code - email | mobile
    $('.woosub_send_mobileemail_code').on('click', function(e) {
        e.preventDefault();

        var master_wrapper = $(this).closest('.woosub_body_outer').attr('id');
        var send_mobile_email_code = $(this);
        var _mobile_email = send_mobile_email_code.siblings('.woosub_two_field').find('.hmobileemail').val();

        if (!woosub_is_mobile(_mobile_email) && !woosub_is_email(_mobile_email) ) {
            woosub_show_error('لطفاً یک شماره موبایل یا ایمیل معتبر وارد کنید');
            return;
        }

        if ( woosub_is_mobile(_mobile_email) ) {
            glob_woosub_input_type = 'mobile';
        } else {
            glob_woosub_input_type = 'email';
        }
        glob_woosub_mobile_email = _mobile_email;
        jQuery.ajax({
            url: woosub_options.ajaxurl,
            type: 'POST',
            data: {
                action : 'woosub_send_mobile_email_code',
                mobileemail : _mobile_email,
                type : glob_woosub_input_type,
                security: woosub_options.wssendcodemobileemailnonce,
            },
            beforeSend: function() {
                woosub_show_loading(master_wrapper);
            },
            success: function(response) {
                if (response.success) {
                    woosub_show_success(response.data.message);
                    send_mobile_email_code.parent('.hfield_wrapper_mobileemail').hide();
                    send_mobile_email_code.parent('.hfield_wrapper_mobileemail').siblings('.hfield_wrapper_verify_mobileemail').addClass('woosubflex');
                    send_mobile_email_code.parent('.hfield_wrapper_mobileemail').siblings('.hfield_wrapper_verify_mobileemail').find('.hmobileemailconfirm').focus();
                } else {
                    woosub_show_error(response.data.message);
                }
            },
            complete: function() {
                woosub_hide_loading(master_wrapper);
            }
        });
    });

    // verify otp code - email | mobile trigger
    $('.woosub_two_field .hmobileemailconfirm').keypress(function (e) {
        var key = e.which;
        if(key == 13)  // the enter key code
        {
            $(this).parent('.woosub_two_field').siblings('.woosub_verify_mobileemail_code').click();
            return false;  
        }
    });

    // verify otp code - email | mobile
    $('.woosub_verify_mobileemail_code').on('click', function(e) {
        e.preventDefault();

        var master_wrapper = $(this).closest('.woosub_body_outer').attr('id');
        var verify_otp_code = $(this);
        var _code = verify_otp_code.siblings('.woosub_two_field').find('.hmobileemailconfirm').val();

        if (!woosub_check_is_number(_code)) {
            woosub_show_error('کد تایید وارد شده نامعتبر است');
            return;
        }

        glob_woosub_code = _code;

        jQuery.ajax({
            url: woosub_options.ajaxurl,
            type: 'POST',
            data: {
                action : 'woosub_verify_mobile_email_code',
                type: glob_woosub_input_type,
                mobileemail : glob_woosub_mobile_email,
                code : _code,
                security: woosub_options.wsverifycodemobileemailnonce,
            },
            beforeSend: function() {
                woosub_show_loading(master_wrapper);
            },
            success: function(response) {
                if (response.success) {
                    woosub_show_success(response.data.message);
                    verify_otp_code.parent('.hfield_wrapper_verify_mobileemail').hide();
                    verify_otp_code.parent('.hfield_wrapper_verify_mobileemail').removeClass('woosubflex');
                    verify_otp_code.parent('.hfield_wrapper_verify_mobileemail').siblings('.hfield_wrapper_verified_mobileemail').addClass('woosubflex');
                    verify_otp_code.parent('.hfield_wrapper_verify_mobileemail').siblings('.hfield_wrapper_verified_mobileemail').find('.hmobileemailconfirmed').val(glob_woosub_mobile_email);
                    verify_otp_code.parent('.hfield_wrapper_verify_mobileemail').siblings('.hfield_wrapper_verified_mobileemail').find('.hmobileemailchecksum').val(response.data.checksum);
                } else {
                    woosub_show_error(response.data.message);
                }
            },
            complete: function() {
                woosub_hide_loading(master_wrapper);
            }
        });
    });


    // submit data
    $('.woosub_submit_form').on('click', function(e){
        e.preventDefault();
        var master_wrapper = $(this).closest('.woosub_body_outer').attr('id');
        var master_inline_wrapper_object = $(this).closest('.woosub_inline_wrapper');
        var woosub_body_outer_object = $(this).closest('.woosub_body_outer');
        var verify_method = $(this).closest('.woosub_body_outer').attr('data-method');
        
        var submit = $(this);
        var _mobile = '';
        var _mobile_checksum = '';
        var _email = '';
        var _email_checksum = '';
        var _mobileemail = '';
        var _mobileemail_checksum = '';
        var _name = '';
        var _family = '';
        var _userisnotuser = '';
        var _formid = '';
        var _formtype = '';
        var _usertype = '';
        var _userid = 0;
        var _itemid = 0;
        var _captcha = '';
        var _captcha_hash = '';
        var _register = 'no';

        var instock_chk_status = '';
        var onsale_chk_status = '';
        var coupon_chk_status = '';
        var minprice_chk_status = '';
        var newproduct_chk_status = '';
        var _minprice_value = '';


        //user type
        var usertype_selector = submit.parent().siblings('.hfield_wrapper_usertype').find('.woosubusertype');
        _usertype = usertype_selector.val();
        if ( woosub_is_empty(_usertype)) {
            woosub_show_error('نوع کاربر نامعتبر است');
            return;
        }
        
        if (_usertype == 'guest' ) {
            switch (verify_method) {
                case 'mobile':
                    {
                        var mobile_selector = submit.parent().siblings('.hfield_wrapper_mobile');
                        
                        if (mobile_selector.length > 0) {
                            if ( mobile_selector.hasClass('hfield_wrapper_two') ) {
                                _mobile = mobile_selector.find('.hmobile').val();
                                _mobile_checksum = mobile_selector.siblings('.hfield_wrapper_verified_mobile').find('.hmobilechecksum').val();

                                if ( ! woosub_is_mobile(_mobile) ) {
                                    woosub_show_error('شماره موبایل نامعتبر است');
                                    return;
                                }
                                if ( woosub_is_empty(_mobile_checksum) ) {
                                    woosub_show_error('شماره موبایل تایید نشده است');
                                    return;
                                }

                            } else {
                                _mobile = mobile_selector.find('.hmobile').val();
                                _mobile_checksum = '';
                                if ( ! woosub_is_mobile(_mobile) ) {
                                    woosub_show_error('شماره موبایل نامعتبر است');
                                    return;
                                }
                            }   
                        }
                    }
                    break;
                case 'email':
                    {
                        var email_selector = submit.parent().siblings('.hfield_wrapper_email');

                        if ( email_selector.hasClass('hfield_wrapper_two') ) {
                            _email = email_selector.find('.hemail').val();
                            _email_checksum = email_selector.siblings('.hfield_wrapper_verified_email').find('.hemailchecksum').val();

                            if ( ! woosub_is_email(_email) ) {
                                woosub_show_error('ایمیل نامعتبر است');
                                return;
                            }
                            if ( woosub_is_empty(_email_checksum) ) {
                                woosub_show_error('ایمیل تایید نشده است');
                                return;
                            }

                        } else {
                            _email = email_selector.find('.hemail').val();
                            _email_checksum = '';
                            if ( ! woosub_is_email(_email) ) {
                                woosub_show_error('ایمیل نامعتبر است');
                                return;
                            }
                        }
                    }
                    break;
                case 'mobileemail':
                    {
                        var mobileemail_selector = submit.parent().siblings('.hfield_wrapper_mobileemail');
                        console.log("🚀 ~ $ ~ mobileemail_selector:", mobileemail_selector)

                        if ( mobileemail_selector.hasClass('hfield_wrapper_two') ) {
                            _mobileemail = email_selector.find('.hmobileemail').val();
                            _mobileemail_checksum = mobileemail_selector.siblings('.hfield_wrapper_verified_mobileemail').find('.hmobileemailchecksum').val();

                            if ( ! woosub_is_email(_mobileemail) && !woosub_is_mobile(_mobileemail)) {
                                woosub_show_error('شماره موبایل / ایمیل نامعتبر است');
                                return;
                            }

                            if ( woosub_is_empty(_mobileemail_checksum) ) {
                                woosub_show_error('عدد کنترلی نامعتبر است');
                                return;
                            }

                        } else {
                            _mobileemail = mobileemail_selector.find('.hmobileemail').val();
                            _mobileemail_checksum = '';
                            if ( ! woosub_is_email(_mobileemail) && !woosub_is_mobile(_mobileemail)) {
                                woosub_show_error('شماره موبایل / ایمیل نامعتبر است');
                                return;
                            }
                        }

                        if (woosub_is_mobile(_mobileemail)) {
                            glob_woosub_input_type = 'mobile';
                        }
                        if (woosub_is_email(_mobileemail)) {
                            glob_woosub_input_type = 'email';
                        }
                    }
                    break;
                case 'mobileemailseperate':
                {
                    // mobile
                    var mobile_selector = submit.parent().siblings('.hfield_wrapper_mobile');

                    if ( mobile_selector.hasClass('hfield_wrapper_two') ) {
                        _mobile = mobile_selector.find('.hmobile').val();
                        _mobile_checksum = mobile_selector.siblings('.hfield_wrapper_verified_mobile').find('.hmobilechecksum').val();

                        if ( ! woosub_is_mobile(_mobile) ) {
                            woosub_show_error('شماره موبایل نامعتبر است');
                            return;
                        }
                        if ( woosub_is_empty(_mobile_checksum) ) {
                            woosub_show_error('شماره موبایل تایید نشده است');
                            return;
                        }

                    } else {
                        _mobile = mobile_selector.find('.hmobile').val();
                        _mobile_checksum = '';
                        if ( ! woosub_is_mobile(_mobile) ) {
                            woosub_show_error('شماره موبایل نامعتبر است');
                            return;
                        }
                    }
                    // email
                    var email_selector = submit.parent().siblings('.hfield_wrapper_email');

                    if ( email_selector.hasClass('hfield_wrapper_two') ) {
                        _email = email_selector.find('.hemail').val();
                        _email_checksum = email_selector.siblings('.hfield_wrapper_verified_email').find('.hemailchecksum').val();

                        if ( ! woosub_is_email(_email) ) {
                            woosub_show_error('ایمیل نامعتبر است');
                            return;
                        }
                        if ( woosub_is_empty(_email_checksum) ) {
                            woosub_show_error('ایمیل تایید نشده است');
                            return;
                        }

                    } else {
                        _email = email_selector.find('.hemail').val();
                        _email_checksum = '';
                        if ( ! woosub_is_email(_email) ) {
                            woosub_show_error('ایمیل نامعتبر است');
                            return;
                        }
                    }

                }
                break;
            }
        }
        
        
        // name
        var name_selector = submit.parent().siblings('.hfield_wrapper_name').find('.hname');
        if ( name_selector.length > 0 ) {
            _name = name_selector.val();
            if (woosub_is_empty(_name) && name_selector.hasClass('itisrequired')) {
                woosub_show_error('لطفاً نام خود را وارد کنید');
                return;
            }
        }

        
        //family
        var family_selector = submit.parent().siblings('.hfield_wrapper_family').find('.hfamily');
        if ( family_selector.length > 0 ) {
            _family = family_selector.val();
            if (woosub_is_empty(_family) && family_selector.hasClass('itisrequired')) {
                woosub_show_error('لطفاً نام خانوادگی خود را وارد کنید');
                return;
            }
        }
       
        //honeypot
        var userisnotuser_selector = submit.parent().siblings('.hfield_wrapper_userisnotuser').find('.userisnotuser');
        _userisnotuser = userisnotuser_selector.val();
        if ( !woosub_is_empty(_userisnotuser)) {
            woosub_show_error('فیلد تشخیص کاربر نامعتبر است');
            return;
        }
        
        //form id
        var formid_selector = submit.parent().siblings('.hfield_wrapper_formid').find('.woosubformid');
        _formid = formid_selector.val();

        if ( woosub_is_empty(_formid)) {
            woosub_show_error('شناسه فرم نامعتبر است');
            return;
        }
        
        //form type
        var formtype_selector = submit.parent().siblings('.hfield_wrapper_formtype').find('.woosubformtype');
        _formtype = formtype_selector.val();
        if ( woosub_is_empty(_formtype)) {
            woosub_show_error('نوع فرم نامعتبر است');
            return;
        }
        
        //user id
        var userid_selector = submit.parent().siblings('.hfield_wrapper_userid').find('.woosubuserid');
        _userid = userid_selector.val();
        if ( woosub_is_empty(_userid)) {
            woosub_show_error('شناسه کاربر نامعتبر است');
            return;
        }
       
        //item id
        var item_id_selector = submit.parent().siblings('.hfield_wrapper_itemid').find('.woosubitemid');
        _itemid = item_id_selector.val();
        if ( woosub_is_empty(_itemid)) {
            woosub_show_error('شناسه اشتراک نامعتبر است');
            return;
        }
        if (_formtype == 'woosuball' && _itemid != '0') {
            woosub_show_error('شناسه اشتراک فرم نامعتبر است');
            return;
        }

        // subscribe checkboxes
        var instock_chk  =  submit.parent().siblings('.hfield_wrapper_subcheck').find('.instock');
        if (instock_chk.is(":checked")) {
            instock_chk_status = 'checked';    
        }
        var newproduct_chk  =  submit.parent().siblings('.hfield_wrapper_subcheck').find('.newproduct');
        if (newproduct_chk.is(":checked")) {
            newproduct_chk_status = 'checked';    
        }
        var onsale_chk   =  submit.parent().siblings('.hfield_wrapper_subcheck').find('.onsale');
        if (onsale_chk.is(":checked")) {
            onsale_chk_status = 'checked';
        }
        var coupon_chk   =  submit.parent().siblings('.hfield_wrapper_subcheck').find('.coupon');
        if (coupon_chk.is(":checked")) {
            coupon_chk_status = 'checked';
        }
        var minprice_chk =  submit.parent().siblings('.hfield_wrapper_subcheck').find('.minprice');
        if (minprice_chk.is(":checked")) {
            minprice_chk_status = 'checked';
            _minprice_value =  minprice_chk.parent('.woosubchk_wrapper').siblings('.hminprice').val().replace(',', '');
            if ( woosub_is_empty(_minprice_value) || ! $.isNumeric(_minprice_value)) {
                woosub_show_error('قیمت وارد شده نامعتبر است');
                return;
            }
        }

        // captcha
        var captcha_selector = submit.parent().siblings('.hfield_wrapper_captcha').find('.hcaptcha');
        if ( captcha_selector.length > 0 ) {
            var captcha_hash_selector = submit.parent().siblings('.hfield_wrapper_captcha').find('.hfield_wrapper_captcha_image .woosubcaptchavalue');
            _captcha = captcha_selector.val();
            _captcha_hash = captcha_hash_selector.val();

            if ( woosub_is_empty(_captcha) ||  woosub_is_empty(_captcha_hash) ) {
                woosub_show_error('کد امنیتی وارد شده معتبر نیست');
                return;
            }
            
            if ( ! woosub_check_is_number(_captcha)) {
                woosub_show_error('کد امنیتی باید عددی باشد');
                return;
            }

            if ( _captcha.length !== 4) {
                woosub_show_error('کد امنیتی باید 4 رقمی باشد');
                return;
            }
        }

        if (
            woosub_is_empty(instock_chk_status) && 
            woosub_is_empty(onsale_chk_status) && 
            woosub_is_empty(coupon_chk_status) && 
            woosub_is_empty(minprice_chk_status) &&
            woosub_is_empty(newproduct_chk_status)
        ) {
            woosub_show_error('لطفاً حداقل یک اطلاع رسانی را انتخاب کنید');
            return;
        }

        // register optional checker
        var register_selector_optional = submit.parent().siblings('.hfield_wrapper_register').find('.woosub-toggle-switch .woosub-show-text');
        if ( register_selector_optional.length > 0 ) {
            if (register_selector_optional.hasClass('enabled')) {
                _register = 'yes';
            }
        }

        // required register checker
        var register_selector_required = submit.parent().siblings('.hfield_wrapper_register').find('.hregister');
        if ( register_selector_required.length > 0 ) {
            _register = 'yes';
        }

        jQuery.ajax({
            url: woosub_options.ajaxurl,
            type: 'POST',
            data: {
                action : 'woosub_do_subscribe',
                formid : _formid,
                itemid : _itemid,
                formtype : _formtype,
                usertype : _usertype,
                userid : _userid,
                register: _register,
                mobile : _mobile,
                mobilechecksum : _mobile_checksum,
                email  : _email,
                email_checksum: _email_checksum,
                mobileemail  : _mobileemail,
                mobileemail_checksum: _mobileemail_checksum,
                inputtype :glob_woosub_input_type,
                name : _name,
                family : _family,
                captcha : _captcha,
                captchahash : _captcha_hash,
                userisnotauser :  _userisnotuser,
                security: woosub_options.subscribe,
                instock_chk: instock_chk_status,
                newproduct_chk: newproduct_chk_status,
                onsale_chk: onsale_chk_status,
                coupon_chk: coupon_chk_status,
                minprice_chk: minprice_chk_status,
                minprice_value: _minprice_value,
            },
            beforeSend: function() {
                woosub_show_loading(master_wrapper);
            },
            success: function(response) {
                if (response.success) {
                    woosub_show_success(response.data.message);
                    woosub_hide_loading(master_wrapper);
                    //remove modal
                    if (woosub_body_outer_object.closest('.woosubmodal').length > 0 ) {
                        var outerId = woosub_body_outer_object.attr('id');
                        var number = outerId.split('_')[3];
                        var dataId = 'modalid' + number;
                        $('.woosubmodaltrigger[data-id="' + dataId + '"]').remove();
                        $('.woosubmodal[data-id="' + dataId + '"]').remove();
                    }
                    //remove inline
                    if ( master_inline_wrapper_object.length > 0 ) {
                        master_inline_wrapper_object.remove();    
                    }
                    //remove accordion
                    if ( woosub_body_outer_object.closest('.woosub_panel').length > 0 ) {
                        woosub_body_outer_object.closest('.woosub_panel').siblings('.woosubaccordion').remove();
                        woosub_body_outer_object.closest('.woosub_panel').remove();
                    }
                } else {
                    woosub_show_error(response.data.message);
                }
            },
            complete: function() {
                woosub_hide_loading(master_wrapper);
            }
        });

    });


    //  functions
    function woosub_show_loading(formid) {
        $( '#' + formid +' .woosub_loader_wrapper').addClass('woosubshowloader');
        $( '#' + formid +' .woosub_body_inner').addClass('woosubblur');
    }
    function woosub_hide_loading(formid) {
        $( '#' + formid +' .woosub_loader_wrapper').removeClass('woosubshowloader');
        $( '#' + formid +' .woosub_body_inner').removeClass('woosubblur');
    }

    var woosub_show_success = function (message) {
        $.toast({
            text: message,
            showHideTransition: 'fade',
            textAlign: 'center',
            stack: false,
            position: 'bottom-center',
            bgColor: '#3c763d',
            textColor: '#ffffff',
            loaderBg: 'green',
            class: 'woosub-toast',
            hideAfter: 10000,
            allowToastClose: false,
        });
    }

    var woosub_show_error = function (message) {
        $.toast({
            text: message,
            showHideTransition: 'fade',
            textAlign: 'center',
            stack: false,
            position: 'bottom-center',
            bgColor: '#ef342f',
            textColor: '#ffffff',
            loaderBg: '#c10500',
            class: 'woosub-toast',
            hideAfter: 10000,
            allowToastClose: false,
        });
    }

    // check email format
    var woosub_is_email = function (email) {
        var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
        return regex.test(email);
    }

    // check mobile format
    var woosub_is_mobile = function (mobileNumber) {
        var regex = /^09\d{9}$/;
        return regex.test(mobileNumber);
    }


    // correct mobile numbers
    function woosub_correct_number( $mobile ) {
        var inputs = "" + $mobile;
        new_val = inputs.replace(/۰/g, '0').replace(/۱/g, '1').replace(/۲/g, '2').replace(/۳/g, '3').replace(/۴/g, '4').replace(/۵/g, '5').replace(/۶/g, '6').replace(/۷/g, '7').replace(/۸/g, '8').replace(/۹/g, '9').replace(/٤/g, '4').replace(/٥/g, '5').replace(/٦/g, '6');        
        new_val = new_val.replace(/٠/g, '0').replace(/١/g, '1').replace(/٢/g, '2').replace(/٣/g, '3').replace(/٤/g, '4').replace(/۵/g, '5').replace(/٦/g, '6').replace(/٧/g, '7').replace(/٨/g, '8').replace(/٩/g, '9').replace(/٤/g, '4').replace(/٥/g, '5').replace(/٦/g, '6');
        return new_val;   
    }

    // check empty function
    function woosub_is_empty (data) {
        if(typeof(data) === 'object'){
            if(JSON.stringify(data) === '{}' || JSON.stringify(data) === '[]'){
                return true;
            }else if(!data){
                return true;
            }
            return false;
        }else if(typeof(data) === 'string'){
            if(!data.trim()){
                return true;
            }
            return false;
        }else if(typeof(data) === 'undefined'){
            return true;
        }else{
            return false;
        }
    }

    function woosub_check_is_number(input) {
        if (!/^\d+$/.test(input)) {
            return false;
        }
        return true;
    }
    function woosub_check_length(input, len) {
        if (input.length !== len) {
            return false;
        }
        return true;
    }
    // jast farsi character
    $("input.itisfarsi").on("input", function() {
        var inputText = $(this).val();
        var farsiRegex = /[\u0600-\u06FF\s]/;
        var filteredText = "";
        for (var i = 0; i < inputText.length; i++) {
            if (farsiRegex.test(inputText[i])) {
                filteredText += inputText[i];
            }
        }
        $(this).val(filteredText);
    });

    $('.woosubnumberonly').keypress(function (e) {    
        var charCode = (e.which) ? e.which : event.keyCode    
        if (String.fromCharCode(charCode).match(/[^0-9]/g))    
        return false;
    });    

});