/**
* Classe de handler qui traite les boutons nvigation. Lorsque'on clique sur un bouton celui-ci determine la valeur du
* submitBy : c'est elt.value si cette valeur est non vide, e.name sinon (qui ne doit jamais etre vide). Elle passe cette * valeur a la method submitBy() de son formulaire. Si cette appel retourne true on laisse le processus continuer, sinon
* on arrete la propagation. Si des controles ont besoin de faire des verifications avant soumission il doivent
* observer l'evenement submit du formulaire.
*/

/**
* Elle etent IAD_PageController.InpuHandler et redefinit handleEvent.
*/

IAD_PageController.SubmitButtonHandler = IAD_Class.create("SubmitButtonHandler", IAD_PageController.ControlHandler,
{
    initialize: function($super, elt, pc)
    {
        $super(elt, pc);
        var _toValidate = $H({});
        var THAT = this;
        var _eventStopped = false;

        this.stopEvent = function(evt)
        {
            //pc.debug("SubmitButtonHandler, stopping " + evt.type + " for " + elt.id);
            evt.stop();
            _eventStopped = true;

            return this;
        }

        this.eventStopped = function()
        {
            return _eventStopped;
        }

        this.addToValidate = function(id)
        {
            return _toValidate.set(id, id);
        }

        this.removeToValidate = function(id)
        {
            return _toValidate.remove(id);
        }

        if(!Object.isUndefined(elt.toValidate))
        {
            elt.toValidate.each(function(id) {THAT.addToValidate(id);});
        }

        var $super_handleEvent = this.handleEvent.bind(this);
        this.handleEvent = function(evt)
        {
            _eventStopped = false;
            switch(evt.type)
            {
            case "click":
                if(elt.hasClassName("Off"))
                {
                    this.stopEvent(evt);
                    //evt.stop();
                    break;
                }
                //On parcours la liste des object a valider
                var h;
                var that = this;
                _toValidate.each(function(pair)
                    {
                        if(h=pc.getElementHandler(pair.key, "*", false))
                        {
                            //alert("SubmitButtonHandler : validating " + pair.key);
                            if(!h.validate(evt))
                            {
                                //alert("SubmitButtonHandler : validating " + pair.key + " failed");
                                that.stopEvent(evt);
                                //evt.stop();
                            }
                        }
                    }
                );
                //alert("SubmitButtonHandler : validating all elts : OK");
                if(elt.splash)
                {
                    //alert("SubmitButtonHandler : elt.splash="+elt.splash);
                    getElt(elt.splash,  true).show();
                }
                //Si l'action est confirmee et que l'autorisation est donnee par le formulaire (submitBy() retourne true) on laisse la main sinon on bloque l'action
                //alert("SubmitButtonHandler.handleEvent : do it : this._getSubmittedBy()=" + this._getSubmittedBy());
                if(!(this._confirm() && this.getFormHandler().submitBy(this._getSubmittedBy())))
                {
                    //alert("SubmitButtonHandler : preventing default");
                    this.stopEvent(evt);
                    //evt.stop();
                    return;
                }
                if(!(Object.isUndefined(elt.action)))
                {
                    this.getFormHandler().setAction(elt.action);
                }
                if(!(Object.isUndefined(elt.submitData)))
                {
                    //pc.debug("SubmitButtonHandler, " + elt.handlerClass);
                    //pc.debug("SubmitButtonHandler, " + elt.submitData);
                    //pc.debug("SubmitButtonHandler, " + $H(elt.submitData).values().length);
                    this.setDataValues(elt.submitData);
                }
                //evt.stop();
                return true;
            break;

            default:
                $super_handleEvent(evt);
            break;
            }
        }
    }
});

