<script>
    document.unloading = false;
    jQuery(window).on('beforeunload',function(){
        document.unloading = true;
    });

    jQuery(function(){
        
        jQuery('FORM').on('submit',function(e){
            // Prevent form submit if fields are already submitted
            var busy = jQuery(this).attr('submitting');
            if (busy){
                e.preventDefault();
                e.cancelBubble = true;
                return false;
            }
            return true;
        });
    });

    jQuery(function() {
        jQuery('.persist').change(function () {
            var ajaxCall;
            var jElem = jQuery(this);
            this.disabled=true;
            jQuery('INPUT[type=submit]').prop('disabled',true);

            var form = jElem.closest('form');
            var busy = form.attr('submitting');
            if (!busy) {
                busy = 0;
            }
            form.attr('submitting',busy+1);

            var value = jElem.val();
            if ('checkbox'===this.type){
                value = (this.checked)?1:0; // otherwise boolean strings of 'false' handled as true in php
            }

            var broken = jElem.attr("name").split('.');
            var type = broken[0];
            var name = broken[1];

            // If SoupWaiter or SoupWaiterAdmin send as current
            // Else send to Kitchen, using new API

            if (true || "SoupWaiter"===type || "SoupWaiterAdmin"===type){

                ajaxCall = {
                    type: "post",
                    dataType: "json",
                    context: this,
                    url: ajaxurl,
                    data: {
                        action: "soup",
                        tab: "{{ tab }}",
                        _vs_nonce: jQuery('INPUT[name="_vs_nonce"]').val(),
                        name: jElem.attr("name"),
                        value: value,
                        id: jElem.prop("id")
                    }
                };
            } else {
                ajaxCall = {
                    type: "post",
                    dataType: "json",
                    context: this,
                    url: '{{ soup.social_api~'/' }}'+type,
                    data: {
                        name: name,
                        value: value,
                    }
                };
            }

            jQuery.ajax(ajaxCall)
                .fail(function(jqXHR,status,error) {
                    if (document.unloading) return;
                    console.log('fail (vacation-soup) '+status+' '+error);
                    // alert('Error: Could not save change, refreshing page may help\n'+status);
                })
                .done(function(response) {
                    if (document.unloading) return;
                    var msg = 'Not connected to Kitchen';
                    var $this = jQuery(this);
                    $this.attr('disabled',false);
                    var form = $this.closest('form');
                    var busy = form.attr('submitting');
                    form.attr('submitting',busy-1);

                    if (!response || response.error && !jQuery(this).hasClass('quiet')) {
                        if (response && response.error) {
                            msg = response.error.message;
                        }
                        alert('Error: could not save change,\n'+jQuery(jQuery.parseHTML(msg)).text());
                    }
                })
                .always(function(response){
                    if (document.unloading) return;
                    jQuery(this).removeClass('required');
                    jQuery('INPUT[type=submit]').prop('disabled',false);
                    var thenDo = jQuery(this).data('persist-action');
                    if (thenDo){
                        eval(thenDo);
                    }
                });
        })
    });
</script>
<form class="tab-{{ tab }} requested-tab-{{ admin.requested_tab }}"
        name="{% block form_name %}post{% endblock form_name %}"
        action="{% block form_action %}{% endblock form_action %}"
        method="post"
        id="{% block form_id %}{{ block('form_name') }}{% endblock form_id %}">
    {{ fn('wp_nonce_field', 'vacation-soup', '_vs_nonce', false, false) }}
    <input type="hidden" id="tab" name="tab" value="{{ tab }}">
    <input type="hidden" id="requested-tab" name="requested-tab" value="{{ admin.requested_tab }}">
    <input type="hidden" id="user-id" name="user_ID" value="{{ user.id }}">
    <input type="hidden" id="tzoffset" name="tzoffset">
    {% block form_header %}{% endblock form_header %}
    {% block form_content %}{% endblock form_content %}
</form>
