/**
 * Vérifie que les champs obligatoires des formulaires soient bien renseignés
 *
 * @author     Eric Giovannetti <eric@bleuroy.com>
 * @author     David Gueye <david@bleuroy.com>
 * @copyright   BleuRoy.com
 * @version    0.9.1b
 */
 
 // SPECIAL FORMULAIRE DE COTATION FRET
 function checkformCotation(_formulaire)
 {
 	var idErreur = 'listeErreurs';
 	var messageErreur = "";
 	if(checkform(_formulaire)) // on passe d'abord par la validation normale des champs obligatoires
 	{
 		// on verifie que les dimensions sont bonnes
    	if(!verif_gabarit(_formulaire.type_vehicule.value, _formulaire.longueur.value, _formulaire.largeur.value, _formulaire.hauteur.value, _formulaire.poids.value)) {
	     messageErreur = "Attention, véhicule hors gabarit. Merci de revoir les dimensions. "
	    }
    	else {
    		if(_formulaire.type_vehicule.value == "Autre"){ 
    			messageErreur = "Vous avez choisi un type de véhicule particulier. Merci de contacter directement l'agence de votre port de départ pour effectuer votre demande de cotation.";
    		}
    	}
    	if(_formulaire.voyage[1].checked == true && !_formulaire.vehicule_convoyeur_identique.checked) // s'il s'agit d'un aller retour, on teste aussi pour le retour
    	{
    		if(!verif_gabarit(_formulaire.type_vehicule_retour.value, _formulaire.longueur_retour.value, _formulaire.largeur_retour.value, _formulaire.hauteur_retour.value, _formulaire.poids_retour.value)) {
	        	messageErreur = "Attention, véhicule hors gabarit. Merci de revoir les dimensions. "
		    }
	    	else {
	    		if(_formulaire.type_vehicule_retour.value == "Autre"){
	    			messageErreur = "Vous avez choisi un type de véhicule particulier pour votre voyage retour. Merci de contacter directement l'agence de votre port de départ pour effectuer votre demande de cotation.";
	    		}
    		}
    	}
	    
	    
	    if(messageErreur != "")
	    {
	    	// Vérifie qu'il n'y a pas de message d'erreur
	        if(!document.getElementById(idErreur)) 
	        {
    			// Crée le message d'erreur
	            var blocIdErreur = document.createElement('DIV');
	            blocIdErreur.id = idErreur;
	            var paragraphe = document.createElement('P');
	            paragraphe.appendChild(document.createTextNode(messageErreur)); 
	            // Ajoute le lien si jamais c'est une erreur de taille
	            if(messageErreur == "Attention, véhicule hors gabarit. Merci de revoir les dimensions. ")
	            {
	            	myA=document.createElement("A");
					lien = "/page/espace-transporteurs-fret/contacts-fret-41.html";
					myA.setAttribute("href", lien);
					text = document.createTextNode("Contacter notre service fret");
					myA.appendChild(text);
					paragraphe.appendChild(myA);
	            }
	            blocIdErreur.appendChild(paragraphe);
	            // Trouve le bouton d'envoi
			    for(var i=0; i<_formulaire.getElementsByTagName('INPUT').length; i++) {
			        if(/submit/i.test(_formulaire.getElementsByTagName('INPUT')[i].type) || /image/i.test(_formulaire.getElementsByTagName('INPUT')[i].type)) {
			            var champsBouton = _formulaire.getElementsByTagName('INPUT')[i];
			            break;
			        }
			    }
	            // Ajoute le message d'erreur avant le bouton de validation
	            if(champsBouton) {
	                champsBouton.parentNode.parentNode.insertBefore(blocIdErreur, champsBouton.parentNode);
	            }
	        }
	        return false;
	    }
	}
	else
		return false;
 }
 
 
/**
 * Vérification de la validité des données envoyés par formulaire
 */
function checkform(_formulaire) {

    // Teste si DOM est disponible et s'il y a un élément appelé "required"
    if(!document.getElementById || !document.createTextNode){return;}

    var inputs = _formulaire.getElementsByTagName('INPUT');
    
    for (var i=0; i<inputs.length; i++) {
        if (inputs[i].className == 'langueFormulaire') {
            var langue = inputs[i].value;
            continue;
        }
    }
    
    var idErreur = 'listeErreurs';
    var classErreur = 'erreur';
    if(langue == 'en') {
        var messageErreur = 'Phrase erreur anglais :';
    }
    else if(langue == 'es') {
        var messageErreur = 'Phrase erreur espagnol :';
    }
    else if(langue == 'it') {
        var messageErreur = 'Phrase erreur italien :';
    } else {
        var messageErreur = 'Merci de remplir ou de modifier les champs suivants :';
    }
    
    for (var i=0; i<inputs.length; i++) {
        if (inputs[i].className == 'required') {
            var listeChampsObligatoires = inputs[i].value.split(',');
            continue;
        }
    }
    
    // Supprime le message d'erreur
    if(document.getElementById(idErreur)) {
        var blocIdErreur = document.getElementById(idErreur);
        blocIdErreur.parentNode.removeChild(blocIdErreur);
    }
    
    // Supprime les classes des champs corrigés
    for(var i=0; i<listeChampsObligatoires.length; i++) {
        var champsObligatoire = document.getElementById(listeChampsObligatoires[i]);
        if(!champsObligatoire) {continue;}
        champsObligatoire.className = '';
    }
    
    for(var i=0; i<listeChampsObligatoires.length; i++) {
      if(listeChampsObligatoires[i] == 'heure_rappel') {
          var champsObligatoires = document.getElementById('tableHeureRappel');
          if(document.getElementById('tableHeureRappel'))
          {
            var tableHeureRappel = document.getElementById('tableHeureRappel');
            var inputs = tableHeureRappel.getElementsByTagName('INPUT');
            var check = 0;
            for(var i = 0; i < inputs.length; i++) {
              if(inputs[i].checked) {
                check = 1;
              }
            }

            var champs = document.getElementById('heures');
            if(check == 0) {
              FORMULAIRES_GestionErreurs(champs);
            }
          }
      } else {
        var champsObligatoires = document.getElementById(listeChampsObligatoires[i]);
        if(!champsObligatoires) {continue;}
        // Teste si le champ requis est erroné en fonction de son type 
        switch(champsObligatoires.type.toLowerCase()) {
            case 'text':
                if(champsObligatoires.value == '' && champsObligatoires.id != 'email' && champsObligatoires.id != 'cp' && champsObligatoires.id != 'date_depart_favorite' && champsObligatoires.id != 'date_retour' && champsObligatoires.id != 'date_traversee' && champsObligatoires.id != 'numero_rappel') { FORMULAIRES_GestionErreurs(champsObligatoires) }							
                // Email est un champ spécial nécessitant une vérification
                if(champsObligatoires.id == 'email' && !FORMULAIRES_VerifierAdresseMail(champsObligatoires.value)) { FORMULAIRES_GestionErreurs(champsObligatoires) }	
                // Code postal est un champ spécial nécessitant une vérification
                if(champsObligatoires.id == 'cp' && !FORMULAIRES_VerifierCp(champsObligatoires.value)) { FORMULAIRES_GestionErreurs(champsObligatoires) }	
                // Verification des dates
                if((champsObligatoires.id == 'date_depart_favorite' || champsObligatoires.id == 'date_retour' || champsObligatoires.id == 'date_traversee') && !FORMULAIRES_VerifierDate(champsObligatoires.value)) { FORMULAIRES_GestionErreurs(champsObligatoires) }				
                // Verification numero de téléphone
                if(champsObligatoires.id == 'numero_rappel' && !FORMULAIRES_VerifierTel(champsObligatoires.value)) { FORMULAIRES_GestionErreurs(champsObligatoires) }  
            break;
            case 'textarea':
                if(champsObligatoires.value=='') { FORMULAIRES_GestionErreurs(champsObligatoires) }							
            break;
            case 'checkbox':
                if(!champsObligatoires.checked) { FORMULAIRES_GestionErreurs(champsObligatoires) }							
            break;
            case 'select-one':
            	//alert(champsObligatoires.value);
                if(!champsObligatoires.selectedIndex && champsObligatoires.value == '') { FORMULAIRES_GestionErreurs(champsObligatoires) }			
            break;
            case 'file':
            	if(champsObligatoires.value=='') { FORMULAIRES_GestionErreurs(champsObligatoires) }
            break;
        }
      }
    }
    
   
    return !document.getElementById(idErreur);

    /**
            * Modifie la page afin de renseigner les erreurs de remplissage du formulaire
            */
    function FORMULAIRES_GestionErreurs(_champsObligatoires) {
        // Change la classe du champs erroné
        _champsObligatoires.className = classErreur;

        // Vérifie qu'il n'y a pas de message d'erreur
        if(!document.getElementById(idErreur)) {
            // Crée le message d'erreur
            var blocIdErreur = document.createElement('DIV');
            blocIdErreur.id = idErreur;
            var paragraphe = document.createElement('P');
            paragraphe.appendChild(document.createTextNode(messageErreur))
            blocIdErreur.appendChild(paragraphe);
            var liste = document.createElement('UL');		
            blocIdErreur.appendChild(liste);
            
            // Trouve le bouton d'envoi
            for(var i=0; i<_formulaire.getElementsByTagName('INPUT').length; i++) {
                if(/submit/i.test(_formulaire.getElementsByTagName('INPUT')[i].type) || /image/i.test(_formulaire.getElementsByTagName('INPUT')[i].type)) {
                    var champsBouton = _formulaire.getElementsByTagName('INPUT')[i];
                    break;
                }
            }
            
            // Ajoute le message d'erreur avant le bouton de validation
            if(champsBouton) {
                champsBouton.parentNode.parentNode.insertBefore(blocIdErreur, champsBouton.parentNode);
            }	
        } 
        
        /* Ajoute un élément de liste <li> dans le message d'erreur pointant vers le formulaire mal renseigné */
        var blocIdErreur = document.getElementById(idErreur).getElementsByTagName('UL')[0];
        var elementListe = document.createElement('LI');
        var ancre = document.createElement('A');
        
        // On récupère le contenu de l'élément de liste <li> précédemment créé à partir de la première option <option> d'une selection <select>, ou du label <label> associé du champs incorrect
        if(_champsObligatoires.tagName == 'SELECT') {
            var options = _champsObligatoires.getElementsByTagName('OPTION');
            var elementErreur = options[0].firstChild.nodeValue;
        }
        for(var i=0; i<_formulaire.getElementsByTagName('LABEL').length; i++) {
            if(_formulaire.getElementsByTagName('LABEL')[i].htmlFor == _champsObligatoires.id) {
                var elementErreur = _formulaire.getElementsByTagName('LABEL')[i].firstChild.nodeValue;
                break;
            }
        }
        
        // On enlève les double-points de la fin du label
        elementErreur = elementErreur.replace(/ :/, '');

        // On pointe le lien de l'ancre <a> vers l'id du champs incorrect
        ancre.appendChild(document.createTextNode(elementErreur));
        ancre.href = '#'+champsObligatoires.id;
        ancre.onclick = function() {
            var location = this.href.match(/#(\w.+)/)[1];
            document.getElementById(location).focus();
            return false;
        }
        elementListe.appendChild(ancre);
        blocIdErreur.appendChild(elementListe);
    }
    
    /**
            * Vérifie la validité d'une adresse mail
            *
            * @param {string}    _email   Valeur de l'email
            * @return {boolean} 
            */
    function FORMULAIRES_VerifierAdresseMail(_email) {
        return _email.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
    }
    function FORMULAIRES_VerifierCp(_cp) {
        return _cp.match(/^[0-9]{5}$/);
    }
    function FORMULAIRES_VerifierDate(_date) {
        if(_date.match(/^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/))
        {
        	return true;
        }
        else
        {
        	if(_date.match(/^[0-9]{4}[-](0[1-9]|1[0-2])[-][0-3][0-9]$/))
	        {
	        	return true;
	        }
	        else
	        {
	        	return false;
	        }
	     }
    }
    function FORMULAIRES_VerifierTel(_tel) {
        return _tel.match(/^[0-9]{10}|[+][0-9]{10,20}|[0]{2}[0-9]{10,20}$/);
    }
}
