////////////////////////////////////////////
function verif_form(tab_champ,tab_champ_LIB)
{
//permet de valider si les champs obligatoire sont remplis :
//on passe deux tableaux en variable avec les noms des champs et le libell ø affich ø pour l'erreur
var test_form=true;
            
var test_option=false;

    for (i=0;i<tab_champ.length;i++){
    //gestion des cases d'option : on test la propri øt ø suivante >1 --> alors cases d'options

        if (document.getElementsByName(tab_champ[i]).length>1) {
        //cas d'une case d'option : on tourne sur ts les controles et on v ørifie qu'au moins 1 est coch ø !
            test_option=false;
            for (j=0;j<document.getElementsByName(tab_champ[i]).length;j++){
                if (document.getElementsByName(tab_champ[i])[j].checked) {
                    test_option=true;
                    break;
                }
            
            }
            if (test_option==false) {
                alert("Le champ "+tab_champ_LIB[i]+" est obligatoire.");
                test_form=false;
                break;
            }
        } else {
        //pour les autres controles
            if (document.getElementById(tab_champ[i]).value=="" || document.getElementById(tab_champ[i]).value==0) {
            
                alert("Le champ "+tab_champ_LIB[i]+" est obligatoire.");
                test_form=false;
                break;
            
            }
        }
    }
return test_form;

}//Déclaration des variables globales pour le XMLHttpRequest
var xmlhttp;
var test_envoi;


function envoi_form(formulaire,page_test)
{ 
// formulaire : nom du formulaire appelant, determine les champs a concaténer
// page_test : page.php appelé pour traiter les données

	//création de la chaine
    var data=null;
    if (formulaire!=""){
        var num_elem=document.forms[formulaire].elements.length;
        if (num_elem>0){
            //on execute hors boucle le premier element pour éviter le & inutile --> gere plus bas...
            for (i=0; i<num_elem; i++) {
                //Test du type et pas d'ajout si non checked... ?               
                //il faut encoder les données sinon pb avec les accents...
                if (document.forms[formulaire].elements[i].type=="checkbox"){
                    if (document.forms[formulaire].elements[i].checked) {
                        data += "&" + document.forms[formulaire].elements[i].name+"="+escape(document.forms[formulaire].elements[i].value);
                    }
                } else if(document.forms[formulaire].elements[i].type=="radio"){
                	if (document.forms[formulaire].elements[i].checked) {
                        data += "&" + document.forms[formulaire].elements[i].name+"="+escape(document.forms[formulaire].elements[i].value);
                    }
                } else if (document.forms[formulaire].elements[i].type=="select-multiple"){
                	var nodes = document.forms[formulaire].elements[i].childNodes
                	var nodeName = document.forms[formulaire].elements[i].name;
                	for(j=0;j<nodes.length;j++){
                		if(nodes[j].selected){
                			data += "&" + nodes[j].parentNode.name + "=" +escape(nodes[j].value);
                		}
                	}
                	
                } else {
					data += "&"+document.forms[formulaire].elements[i].name+"="+escape(document.forms[formulaire].elements[i].value);
                }
                
            }
        }
    }
	
	if(data!=null){
    	data=data.substring(1);
    }

	//debug 2009 pb avec ie8
	xmlhttp = createXhrObject();
	
	if (window.XMLHttpRequest){ // code for Mozilla, etc.
		//Pour des raisons obscures on place le onreadystatechange aprés la méthode send de même que pour les parenth?ses.
		//xmlhttp = new XMLHttpRequest();

		//var assertion = navigator.appVersion;
		//var resultat = assertion.search(/MSIE 7.+/);
		//sortie pour IE7
		//if (resultat != -1) xmlhttp.onreadystatechange=xmlhttpChange;
		//xmlhttp.onreadystatechange=xmlhttpChange();
		
		xmlhttp.open("POST",page_test,false); //on travail en synchrone !!! Nécessité d'attendre le résultat du formulaire avant de poursuivre...
		xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
		//debug 2009 pb avec ie8
		if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ //test for Firefox/x.x or Firefox x.x (ignoring remaining digits);
			xmlhttp.onreadystatechange=xmlhttpChange();
		} else {
			xmlhttp.onreadystatechange=xmlhttpChange;
		}
		xmlhttp.send(data);
		//sortie pour FF et IE8 (qui ne supporte pas les parenthéses...
		//if(resultat == -1) xmlhttp.onreadystatechange=xmlhttpChange(); //exécuté lors de la réception complete des données
		//debug 2009 pb avec ie8
		if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ //test for Firefox/x.x or Firefox x.x (ignoring remaining digits);
			xmlhttp.onreadystatechange=xmlhttpChange();
		} else {
			xmlhttp.onreadystatechange=xmlhttpChange;
		}

	}
	// Code for IE
	else if (window.ActiveXObject){
		//xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		if (xmlhttp){
			xmlhttp.onreadystatechange=xmlhttpChange;
			xmlhttp.open("POST",page_test,false);
			xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
			xmlhttp.send(data);
		}
	}
    
    return test_envoi;
}
//debug 2009 pb avec ie8
function createXhrObject()
{
    if (window.XMLHttpRequest)
        return new XMLHttpRequest();
 
    if (window.ActiveXObject)
    {
        var names = [
            "Msxml2.XMLHTTP.6.0",
            "Msxml2.XMLHTTP.3.0",
            "Msxml2.XMLHTTP",
            "Microsoft.XMLHTTP"
        ];
        for(var i in names)
        {
            try{ return new ActiveXObject(names[i]); }
            catch(e){}
        }
    }
    window.alert("Votre navigateur ne prend pas en charge l'objet XMLHTTPRequest.");
    return null; // non supporté
}



function xmlhttpChange(formulaire){
	//Fonction qui renvoie le responseText d'une requête XMLHttpRquest, affecté au "onreadystatechange"
	if (xmlhttp.readyState==4){
		if (xmlhttp.status==200){
			//test navigateur
			//alert(navigator.appName+' '+navigator.appVersion);
	     	if (xmlhttp.responseText==false){
                test_envoi= false;
			} else {
            	//on renvoi vrai uniquement car la procédure est appellée plusieurs fois !
                test_envoi= xmlhttp.responseText;
            }
		}
	}
}
