    function send_form(form, pagedest, post, htmlelement) 
    {
        //htmlelement sert a signaler si on veut executer du javascript ou si on veut uniquement afficher le contenu du retour dans un element html
        var index, valeur, arr_data, i, name, type;   
       
        var nb_items = document.forms[form].elements.length;
        arr_data = new Array(3);
        arr_data[0] = new Array(nb_items);//name
        arr_data[1] = new Array(nb_items);//type
        arr_data[2] = new Array(nb_items);//valeur
        
        for (i=0; i<nb_items; i++)
        {
            index = document.getElementById(form).elements[i];
            name = index.name;
            type = index.type;
            valeur = index.value;
            
            if (type.toLowerCase() == "checkbox")
            {
                if (index.checked)
                {
                    valeur = 1;
                }
                else
                {
                    valeur = 0;
                }
            }
            // s'il s'agit d'un bouton radio on ne garde que la valeur cochée
            if (type.toLowerCase() == "radio")
            {
                if (index.checked==false)
                {
                    name="";
                    valeur="";
                }
            }
            arr_data[0][i]=name;
            arr_data[1][i]=type;
            arr_data[2][i]=valeur;
        }
        return send_data(arr_data,pagedest,post, htmlelement);
    }

    /*
        Pour cette fonction il faut envoyer un arr_data composé de la maniere suivante
        arr_data[0][i]=name
        arr_data[1][i]=type
        arr_data[2][i]=valeur
        Si le type n'est pas necessaire, on peut mettre "hidden" en fixe.
        les 3 arrays contenu dans arr_data doivent avoir le meme nombre de lignes
    */

    function send_data(arr_data, pagedest, post, htmlelement)
    {
        var valeur, libelle_methode, name, type, i, result;
        var data = "";
        result = true;
        for (i =0; i<arr_data[0].length; i++)
        {           
            name=arr_data[0][i];
            type=arr_data[1][i];
            valeur=arr_data[2][i];
            if (name!=="")
            {
                valeur = unescape(valeur);                
                data += name + "=" + valeur.replace(/&/g,"%26") + "&" ;
            }
        }
        if (data !=="")
        {
            data = data.substring(0, (data.length - 1));
        }
        // Preparation de la requete HTTP
        
        // si on est dans le cadre d'un GET
        if(post==false)
        {
           if(data !== "")
           {
                if (pagedest.lastIndexOf("?") == -1)
                {
                    pagedest += "?"+ data;
                }
                else
                {
                    pagedest += "&"+ data;
                }
            }
	       data = null;
	   }
	   
       // Ici on instancie le composant du browser qui transmettra la requete HTTP
       var xhr_object = null;
       if(window.XMLHttpRequest)
       {
            xhr_object = new XMLHttpRequest();
       } // firefox
       else if(window.ActiveXObject) 
       {
            // internet explorer
            try 
            {
                xhr_object = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e)
            {
                xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
            }
       }
       else
       {
            alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
            return false;
        }
        if (post)
        {
            libelle_methode = "POST";
        }
        else
        {
            libelle_methode = "GET";
        }
       
        xhr_object.open(libelle_methode, pagedest, false); // dernier parametre a false pour forcer le mode synchrone
        if(post) 
        {
            xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        }
	    xhr_object.send(data);
	    if (htmlelement==false) // attention pas de !htmlelement ... ie l'interprete mal
	    {
            try
            {
                eval(xhr_object.responseText);
                // et bien entendu on execute le resultat.
            }
            catch(e)
            {
                return false;
            }
        }
        else
        {
            if(document.getElementById(htmlelement))
            {                
                document.getElementById(htmlelement).innerHTML = xhr_object.responseText;
            }
            else
            {
                if(htmlelement)
                {
                    htmlelement.innerHTML = xhr_object.responseText;
                }
                else
                {
                    alert(xhr_object.responseText);
                }
            }
        }
        delete xhr_object;
        delete data;
        delete valeur;
        delete libelle_methode; 
        delete name; 
        delete type; 
        delete i;
        return result;
    }
    
    // Ici on fait clignoter un element    
    
    var nombre_clignotement, compte, timing;
    nombre_clignotement = 3;
    
    function cligOn(what)
    {
	   document.getElementById(what).className = "cligon" ;
	   compte++;
	   timing = window.setTimeout(function() {cligOff(what);}, 100);
    }
    
    function cligOff(what)
    {
	   document.getElementById(what).className = "";
	   if (compte < nombre_clignotement) 
       {
            timing = window.setTimeout(function() {cligOn(what);}, 100);
       }
	   else
       {
            window.clearTimeout(timing);
       }
    }
    function clig(what)
    {
	   compte = 0;
	   timing = window.setTimeout(function() {cligOn(what);}, 100);
    }


    function getstates(idcountry, elem, lng)
    {
        var arr_data = new Array(3)
        arr_data[0] = new Array(2);//name
        arr_data[1] = new Array(2);//type
        arr_data[2] = new Array(2);//valeur
    
        arr_data[0][0] = "idcntr";
        arr_data[1][0] = "";
        arr_data[2][0] = idcountry;
        
        arr_data[0][1] = "elem";
        arr_data[1][1] = "";
        arr_data[2][1] = elem;
          
        send_data(arr_data, "/" + lng + "/getstates", true, false);

    }
    
    function translatemailcontact(lng, start_url)
    {
        var text = document.getElementsByName("msg")[0].value;
        translate(text, lng);
        timing = window.setTimeout(function() {sendmailcontact(start_url);}, 1500);        
        return false;
    }
    
    function sendmailcontact(start_url)
    {
        send_form("contactus", start_url + "/ask", true, false)
        window.clearTimeout(timing);
    }

