
/*==============================================================================
 * Ce fichier contient la definition de la classe de gestion de requete AJAX pour les formulaires
*/
var IAD_Ajax = {};

IAD_Ajax.RequestHandler = Class.create(
{
    initialize: function(pc)
    {
        /**
        * Le formulaire auquel ce handler est associe. Ce formulaire appartient a une page dont le controleur est accessible par fc.getPageController()
        */
        var that = this;
        var _requestEnv = pc.getGlobals("requestEnv");
        var _requestEnvUrl = Object.toQueryString(_requestEnv);
        this.getController = function ()
        {
            return pc;
        }

        this.method = "get";
        //methode qui fait reellement le traitement
        this.onSuccess = function(response)
        {
            var c = that.getController();
            $H(response.responseJSON).each
            (
                function(pair)
                {
                    //alert("RequestHandler, pair.key="+pair.key+", pair.value="+pair.value+" iadClassName="+c.getElementHandler(pair.key, "*").iadClassName);
                    c.getElementHandler(pair.key, "*").setValue(pair.value);
                    //alert("RequestHandler, pair.key="+pair.key+", pair.value="+pair.value);
                }
            );
            c.getStaticSplash().hide();
        }

        this.onFailure = function(req, er)
        {
            pc.reportError("Ajax request failed for " + req.url + "\n " + er);
        }

        this.onException = function(req, er)
        {
            pc.reportError("Ajax request exception for " + req.url + "\n " + er);
        }

        this.handleRequest = function(url, dataControls, evt)
        {
            this.getController().getStaticSplash().show();
            //alert("RequestHandler.handleRequest, url=" +encodeURI(this.getUrl(url + "&" + _requestEnvUrl, dataControls, evt)));
            new Ajax.Request(encodeURI(this.getUrl(url + "&" + _requestEnvUrl, dataControls, evt)), this);
        }

        /**
        * Cette methode complete l'url passee en parametre par des id=value.
        * TODO: pour le moment on ne tient pas compte de l'evenement quand on demande sa valeur a un controle.
        */
        this.getUrl = function (url, dataControls, evt)
        {
            var c = this.getController();
            dataControls.each
            (
                function (pair)
                {
                    url += "&" + pair.key + "=" + c.getElementHandler(pair.key, "*", true).getValue();
                }
            );
            return url;
        }
    }
}
);


