﻿// REQUIRES prototype, scriptaculous, f.js
// VARIABILI RICHIESTE
//    funzione delegata per processing risposta
//    MvRequestPageCustomProcessing  
//    <script type="text/javascript">
//      /* <![CDATA[ */
//      var MvRequestPageClasseElementoMessaggioRisposta = "";
//      /* ]]> */
//   </script>

var RequestPageAvvisoMostrato = false;
var RequestPageSubmitCliccato;
var RequestPageClasseCampoFk = "CampoFkContent";
var RequestPageClasseCampoFkRisposta = "CampoFkRisp";

document.observe('dom:loaded', function() {
    
    abilitaTuttiSubmitButton();
    bindEvents();
});

function bindEvents() {
    rimuoviSpinners();
    inserisciSpinners();
    $$('form').each(function(el) {
        el.select('.' + MvClasseElementiSubmit + ' input[type="submit"]',
            '.' + MvClasseElementiSubmit + ' input[type="image"]').each(function(sub) {
                sub.stopObserving('click');
                sub.observe('click', handleSubmitClick);
            });
        el.stopObserving('submit');
        el.observe('submit', formSubmit);
    });
}
function handleSubmitClick(event) {
    RequestPageSubmitCliccato = Event.element(event);
    mostraSpinnerEl(event);
    
}
function formSubmit(event) {
    if (RequestPageSubmitCliccato.hasClassName('mvNOAjax')) {
        return;
    }
    Event.stop(event);

    var form = Event.element(event);



    disabilitaSubmitButton(form);
    //mostraSpinner(form);
    nascondiAvviso(form);
    resettaCampiErrati(form);
    submitForm.delay(1, form);
}
function submitForm(form) {

    if (typeof RequestPageSubmitCliccato !== 'undefined') {
        var submitCliccato = RequestPageSubmitCliccato.name;

    }
    var theForm = form;
    form.request({
        method: 'post',
        parameters: { 'AJAX_REQUEST': '1', 'URL_PROVENIENZA': window.location.href, 'SUBMIT_CLICCATO': submitCliccato},
        onFailure: function(t) {
            processaRisposta("KO", theForm);
            
        },
        onSuccess: function(t) {
            //alert(t.responseText);
            processaRisposta(t.responseText.evalJSON(), theForm);
        },
        onComplete: function(t) {
            //alert(t.responseText);
            nascondiSpinner(form);
            
        }
    });
    
}
function processaRisposta(s, form) {

    //    bool errore,
    //    string tipoRisposta: Redirect, Data
    //    string messaggioRisposta,
    //    string messaggioRispostaHTML,
    //    string[] campiErrati,
    //    string urlDestinazione



    if (s == "KO") {
        mostraAvviso("<div style=\"margin-top:15px;\">Errore interno del server. Contattare l'amministratore di sistema.</div>", form);
        abilitaSubmitButton(form);
        return;
    }

    //    var v1 = s.split("&");
    //    var errore = v1[0].split("=")[1];
    //    var messaggioRisposta = v1[1].split("=")[1];
    //    var campiErrati = v1[2];
    //    var urlDestinazioneOK = v1[3].split("=")[1];

    var b = new G_Base64();
    var decHTML = b.stringifyArray(b.decodeString(s.messaggioRispostaHTML));

    // richiamo eventuale custom process
    if (typeof MvRequestPageCustomProcessing !== 'undefined') {
        MvRequestPageCustomProcessing(s, form, decHTML);
        return;
    }
    
    if (s.errore == "1") {
        mostraAvviso(decHTML, form);
        evidenziaCampiErrati(s.campiErrati, form);
    }
    else 
    {
        if (s.tipoRisposta == "Redirect") 
        {
            location.href = s.urlDestinazione;
        }
        else if (s.tipoRisposta == "Data") 
        {
            if (s.customData == RequestPageClasseCampoFk) 
            {
                gestisciRispostaCampoFk(s, decHTML, form);
                
            }
            else
                mostraAvviso(decHTML, form);
        }
    }



}
function avvisoMostrato(form) {
    //alert(form);

    abilitaSubmitButton(form);
}
function gestisciRispostaCampoFk(s, decHTML, form) {
    $$('.' + RequestPageClasseCampoFk).each(function(el) {
        if (el.hasClassName(s.urlDestinazione)) {
            Effect.BlindUp(el.readAttribute('id'), { duration: .7 });
            //el.update.delay(.5, decHTML);
            //$(el).update(decHTML);
            aggiornaValore.delay(.8, $(el), decHTML);
            
        }
    });
}
function aggiornaValore(el, valore) {
    Element.hide(el.readAttribute('id'));
    Element.replace(el.readAttribute('id'), valore);
    Element.hide(el.readAttribute('id'));
    bindEvents();
    Effect.BlindDown(el.readAttribute('id'), { delay: .5, duration: 1 });
    //el.update(valore);
}
function evidenziaCampiErrati(campi, form) {
    if (campi == "") return;

    campi.each(function(el) {
        form.getInputs(null, el).each(function(el1) {
            $(el1).addClassName('inputError')
        });
        form.select('select[name=' + el + ']', 'textarea[name=' + el + ']').each(function(el1) {
            $(el1).addClassName('inputError')
        });
        //$(el).addClassName('inputError');
    })
}
function resettaCampiErrati(form) {
    form.getElements().each(function(el) {
        $(el).removeClassName('inputError');
    })
}
function nascondiAvviso(form) {

    if (!RequestPageAvvisoMostrato)
        return;
    form.select('.' + MvRequestPageClasseElementoMessaggioRisposta).each(function(el) {
        //form.select('.casellaRisposta').each(function(el) {

        Effect.BlindUp(el.readAttribute('id'), { duration: .5 });
    });
}
function mostraAvvisoEl(s, form, classe) {

    form.select('.' + classe).each(function(el) {
        //form.select('.casellaRisposta').each(function(el) {
        var cont = el; //.firstDescendant();
        cont.setStyle({ display: 'none' });
        el.update(s);
        cont.removeClassName('noDisplay');

        Effect.BlindDown(cont.readAttribute('id'), { afterFinish: function() {
            abilitaSubmitButton(form);
        }
        });
        RequestPageAvvisoMostrato = true;

    });
}
function mostraAvvisoElId(s, id) {

    $(id).setStyle({ display: 'none' });
    $(id).update(s);
    $(id).removeClassName('noDisplay');

    Effect.BlindDown(id);
    RequestPageAvvisoMostrato = true;

}
function mostraAvviso(s, form) {
    mostraAvvisoEl(s, form, MvRequestPageClasseElementoMessaggioRisposta);    

}

function disabilitaSubmitButton(form) {
    //alert("disabilita");
    form.select('.' + MvClasseElementiSubmit + ' input').each(function(el) {
        el.writeAttribute('disabled', 'disabled');
    });
}
function abilitaSubmitButton(form) {
    //alert("abilita");
    form.select('.' + MvClasseElementiSubmit + ' input').each(function(el) {
        if (el.hasAttribute('disabled')) {
            el.removeAttribute('disabled');
        }
    });
}
function abilitaTuttiSubmitButton() {
    
    $$('.' + MvClasseElementiSubmit + ' input').each(function(el) {
        if (el.hasAttribute('disabled')) {
            el.removeAttribute('disabled');
        }
    });
}


