//on initialise la variable globale de l'objet xhr
var xhr;

//on initialise les autres variables
var resultat_test_ajax_email;
var attente_validation;
var forcer_validation;
var iAjaxTimeoutId;
var iAnimationTimeoutId;

//initialisation de l'objet xhr
if(window.XMLHttpRequest || window.ActiveXObject)
{
	if(window.XMLHttpRequest)
		xhr = new XMLHttpRequest(); 
	//Internet Explorer < 7.0
	else
	{
		try
		{
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			xhr = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
}
else
	//on force la validation du formulaire si le navigateur ne supporte pas l'objet xhr
	forcer_validation = 1;

function test_email()
{
	//si le client a déjà cliqué sur valider, ca ne sert a rien de relancer la requête une deuxième fois !
	if (attente_validation || forcer_validation)
		return true;
	
	//si une requête Ajax était déjà en cours, on l'annule
	if (xhr.readyState != 4 && xhr.readyState != 0)
		xhr.abort();
	
	//lorsque l'objet xhr a été exécuté
	xhr.onreadystatechange = function()
	{
        if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
        {
        	//on stocke le résultat de la requête dans une variable qui sera analysée au moment de la validation du formulaire
        	resultat_test_ajax_email = xhr.responseText;
        	//on vire le timeout si la requête est bien éxécutée
        	clearTimeout(iAjaxTimeoutId);
        	//si le client a cliqué sur le bouton de validation de formulaire, on appèle la fonction
        	if (attente_validation == 1)
        		validation_formulaire();
        }
	}
	//on rentre les paramètres de la requête AJAX
	xhr.open("POST", "../ajax/validation_adresse_mail.php", true);
	//vu que c'est une requête POST, on envoie le header
	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	//on définit les variables qui seront envoyées en POST
	xhr.send("email="+document.getElementById("clt_email").value);
	
	//on vide la chaine de caractère de résultat pour ne pas pouvoir valider le formulaire tant que la requête Ajax n'est pas terminée
	resultat_test_ajax_email = '';
}

function validation_formulaire()
{
	//si la requête Ajax n'a pas été envoyée (le client valide le formulaire sans modifier la valeur de l'email, le onclick ne sera donc pas déclenché)
	if (!xhr.readyState && !resultat_test_ajax_email){
		//on lance le test de l'email
		test_email();
	}
	
	//si le client veut déjà valider son formulaire, on valide quoi qu'il en soit pour ne pas le bloquer
	if (forcer_validation){
		return document.getElementById("formulaire").submit();
	}
	
	//si le résultat de la requête Ajax n'est pas encore renseigné
	if (!resultat_test_ajax_email)
	{
		//on affiche l'image de chargement
		document.getElementById('image_attente_ajax').style.display = "block";
		
		//on lance la fonction qui modifie la couleur du message d'attente (part de 120,120,120 par incrément de 10)
		animation_attente(120, 7);
		
		//la requête Ajax n'est pas encore terminée donc on doit relancer cette fonction une fois terminée
		attente_validation = 1;
		
		//on met un timeout de 5 secondes pour la requête, en cas de dépassement de ce timeout, on envoie le formulaire
		iAjaxTimeoutId = setTimeout(function(){xhr.abort();email_non_valide();}, 5000);
	}
	else
	{
		if (resultat_test_ajax_email == 'erreur')
			email_non_valide();
		else
			document.getElementById("formulaire").submit();
	}
}

function animation_attente(iCouleur, iIncrement)
{
	//on vérifie que la couleur ne vas pas dépasser les bornes
	if (iCouleur + iIncrement < 70 || iCouleur + iIncrement > 220)
		//on inverse l'incrément pour repartir dans l'autre sens
		iIncrement = -iIncrement;
	
	//on ajoute l'incrément à la couleur
	iCouleur += iIncrement;
	
	//on met à jour la couleur du texte
	document.getElementById('texte_attente_ajax').style.color='rgb('+iCouleur+','+iCouleur+','+iCouleur+')';
	
	//on lance le timer qui rappèlera la fonction a échéance avec les mêmes paramètres
	iAnimationTimeoutId = setTimeout(function(){animation_attente(iCouleur, iIncrement);}, 50);
}

function email_non_valide()
{
	//on cache l'image de chargement
	document.getElementById('image_attente_ajax').style.display = "none";
	//on arrête le timer de transparence
	clearTimeout(iAnimationTimeoutId);
	//on vire le timeout de la requête qui ne sert plus à rien
    clearTimeout(iAjaxTimeoutId);
	//on affiche le message d'erreur pour prévenir le client
	document.getElementById('mail_non_valide').style.display = "block";
	
	//on remet tous les champs avec la couleur par défaut
	reinitialiser("cmd_societe");
	reinitialiser("clt_societe");
    reinitialiser("cmd_nom");
    reinitialiser("clt_nom");
    reinitialiser("cmd_prenom");
    reinitialiser("clt_prenom");
    reinitialiser("cmd_adresse1");
    reinitialiser("clt_adresse1");
    reinitialiser("cmd_adresse2");
    reinitialiser("clt_adresse2");
    reinitialiser("cmd_code_postal");
    reinitialiser("clt_code_postal");
    reinitialiser("cmd_ville");
    reinitialiser("clt_ville");
    reinitialiser("cmd_pays");
    reinitialiser("clt_pays");
    reinitialiser("cmd_telephone");
    reinitialiser("clt_telephone");
    reinitialiser("cmd_portable");
    reinitialiser("clt_portable");
    reinitialiser("cmd_fax");
    reinitialiser("clt_fax");
    reinitialiser("clt_email");
    reinitialiser("clt_mdp");
    reinitialiser("clt_mdp2");
    reinitialiser("clt_provenance");
	
    //si il y a l'élément avec le message d'erreur
    if(document.getElementById("texte_erreurs")){
        //on efface le message
	    document.getElementById("texte_erreurs").style.display = "none";
    }
    
	//et on met le champ de l'adresse mail en rouge
	document.getElementById("clt_email").style.backgroundColor = "#D62027";
	document.getElementById("clt_email").style.color = "#FFFFFF";
	
	//on ne fait qu'une seul test sur l'adresse mail, après on valide automatiquement
	forcer_validation = 1;
}

function copier_coordonnees(){
    document.getElementById("cmd_societe").value = document.getElementById("clt_societe").value;
    document.getElementById("cmd_civilite").options[document.getElementById("clt_civilite").selectedIndex].selected = true;
    document.getElementById("cmd_nom").value = document.getElementById("clt_nom").value;
    document.getElementById("cmd_prenom").value = document.getElementById("clt_prenom").value;
    document.getElementById("cmd_adresse1").value = document.getElementById("clt_adresse1").value;
    document.getElementById("cmd_adresse2").value = document.getElementById("clt_adresse2").value;
    document.getElementById("cmd_code_postal").value = document.getElementById("clt_code_postal").value;
    document.getElementById("cmd_ville").value = document.getElementById("clt_ville").value;
    document.getElementById("cmd_pays").value = document.getElementById("clt_pays").value;
    document.getElementById("cmd_telephone").value = document.getElementById("clt_telephone").value;
    document.getElementById("cmd_portable").value = document.getElementById("clt_portable").value;		
    document.getElementById("cmd_fax").value = document.getElementById("clt_fax").value;
}

function reinitialiser(sId){
	if (document.getElementById(sId)){
		document.getElementById(sId).style.backgroundColor = "";
	    document.getElementById(sId).style.color = "";
	}
}

//Fonction qui test si un nom de Socièté est rentré
function test_societe(){
    if(document.getElementById('clt_societe').value.length > 0){
            document.getElementById('div_clt_numero_tva1').style.display="block";
            document.getElementById('div_clt_numero_tva2').style.display="block";
    }
    else{
            document.getElementById('div_clt_numero_tva1').style.display="none";
            document.getElementById('div_clt_numero_tva2').style.display="none";
    }
}
//fonction pour afficher le boutton pour modifier l'adresse de facturation
function show_save_button(adresse){
	document.getElementById('boutton_valider_adresse_livraison').style.display = "none";
	document.getElementById('boutton_valider_adresse_facturation').style.display = "none";
	document.getElementById('boutton_valider_adresse_'+adresse).style.display = "inline";
}
