/***************************************************
 *
 * @ Authors  : Kévin Vicrey
 *
 * @ Email    : Anomen83@yahoo.fr
 *
 * @ Date     : 18/10/2006
 *
 * @ Fichier  : formajax.js
 *
 * @ Synopsis : Permet de vérifier un formulaire part
 *              AJAX.
 *
 ***************************************************/
 
//=============================================================
// Page : Page PHP à executer.
// Fich : Fichier à ouvrir dans le PHP.
// NodeForm : Node du formulaire.
// Params : Paramètres optionnels
//    - NodeLoad : Node pour l'image de chargement.
//    - Disabled : Si FALSE, le bouton submit ne sera pas grisé.
//    - onError  : Si la page PHP retourne une exception.
//    - onSuccess: Traitement du retour de la page PHP.
//    - ClassErr : Le style CSS des champs ayant des erreurs.
//    - ClassNormal : Le style CSS des champs ayant dans erreur.
//=============================================================

function FormAjax (Page, Fich, NodeForm, Params)
{
    try
    {
        if (typeof Page != "string")
            throw ("La variable `Page` doit être une chaine de caractères !");
        
        if (typeof Fich != "string")
            throw ("La variable `Fich` doit être une chaine de caractères !");
        
        if (typeof NodeForm != "object")
            throw ("La variable `NodeForm` doit être un node !");
        
        if (typeof Params == "undefined")
            Params = {};
        else
        {
            if (typeof Params.MessGen != "undefined" && typeof Params.MessGen != "object")
            throw ("La variable `Params.MessGen` doit être un node !");
        }
        
        TraiterFormAjax (Page, Fich, NodeForm, Params);
    }
    catch (e)
    {
        alert (e);
    }
    
} // FormAjax()

function TraiterFormAjax(Page, Fich, NodeForm, Params)
{
    var NodeSbm = "";
    var NS = {};
    NS.url = Page;
    NS.parameters = {};
    NS.parameters.Fich = Fich;
    
    // Les paramètres
    with (NodeForm)
        for (var i = 0; i < elements.length; ++i)
            if (!elements[i].type)
                continue;
            else if (elements[i].type == "submit")
                NodeSbm = elements[i];
            else if (elements[i].name != "")
                eval ("NS.parameters."+elements[i].name+" = NodeForm.elements["+i+"].value;");
            
    // Le bouton submit existe ?
    if (NodeSbm == "")
        throw ("Il n'y a pas de bouton submit !");
    
    // Le chargement
    if (Params.NodeLoad && typeof Params.NodeLoad != "object")
        throw ("La variable `Params.NodeLoad` doit être un node !");
    
    NS.onLoading = function (obj)
    {
        if (Params.NodeLoad)
            Params.NodeLoad.innerHTML = "<img src='/sites/portail/skins/images/process.gif' alt='' style='vertical-align: middle;' />";
        
        if (!Params.Disabled)
            NodeSbm.disabled = true;
    }

    NS.onComplete = function (obj)
    {
        if (!Params.Disabled)
            NodeSbm.disabled = false;
    }
    
    // La fonction de succès
    NS.onSuccess = function (obj)
    {
        eval (obj.responseText);
            
        if (Res["Err"])
        {
            if (!Params.Disabled)
                NodeSbm.disabled = false;

            if (Params.NodeLoad)
                Params.NodeLoad.innerHTML = "";
            
            if (Params.onError)
                Params.onError (Res["Err"]["Mess"]);
            else
            {
                if (Params.MessGen)
                {
                    Params.MessGen.innerHTML = Res["Err"]["Mess"];
                    Params.MessGen.style.display = "";
                }
                else
                    alert (Res["Err"]["Mess"]);
                return;
            }
        }
        
        // Surligner les champs
        with (NodeForm)
            for (var i = 0; i < elements.length; ++i)
                if (elements[i].type != "submit")
                {
                    var Mess = Res["Champs"] && Res["Champs"][elements[i].name]
                             ? Res["Champs"][elements[i].name]
                             : null;
                             
                    var ErrInner = Mess ? Res["Champs"][i] : "";
                    
                    if (Mess && Params.ClassErr)
                        elements[i].className = Params.ClassErr;
                    else if (!Mess && typeof Params.ClassNormal != "undefined")
                        elements[i].className = Params.ClassNormal;
                    
                    if (document.getElementById("Err_"+elements[i].name))
                        document.getElementById("Err_"+elements[i].name).innerHTML = Mess;
                    
                }
        
        if (Params.onSuccess)
            Params.onSuccess(NodeForm, Res);
        else if (!Res["Champs"] && (typeof Params.NoSubmit == "undefined" || !Params.NoSubmit))
            NodeForm.submit();
        else
        {
            if (Params.NodeLoad)
                Params.NodeLoad.innerHTML = "";
        }
        
    }
    
    if (typeof Params.Method != "undefined" && Params.Method == "post")
        advAJAX.post (NS);
    else
        advAJAX.get (NS);

}
