/* auteur: Bernard Martin-Rabaud */
/* Date de création: 15/03/2003 */


t_champs = new Array();
t_champs[0] = new Array("nom_ecole|Nom de l'établissement|Name meiner Schule", "type_ecole|Type d'école|Schultyp", "classe_jumelage1|Classe prévue pour le jumelage|Klasse für den Austausch", "nombre_eleves1|Nombre d'élèves|Anzahl der Schüler", "LV1|Allemand Langue vivante|Französisch Fremdsprache", "combien_annees1|Allemand depuis combien d'années ?|Französisch seit wieviel Jahren", "adresse_ecole|Adresse de l'établissement|Adresse unserer Schule", "nom_prof|Nom de l'enseignant|Name des Lehrers", "adr_email|Adresse e-mail|E-mail des Lehrers oder der Schule", "photo_num|Appareil photo numérique ?|Digitaler Fotoapparat", "connaiss_info|Connaissances en informatique de l'enseignant|Informatikkenntnisse des Lehrers");
t_champs[1] = new Array("nom|Nom|Name", "prenom|Prénom|Vorname", "adresse|Adresse|Adresse", "cp|CP|PLZ", "ville|Ville|Ort", "pays|Pays|Land", "tel|Téléphone|Telefon Nummer", "email|E-mail|Email", "date_naissance|Date de naissance|Geburtstag", "ecole|Etablissement scolaire|Schule", "niveau|Allemand depuis combien d'années ?|Französisch seit wieviel Jahre?", "hobbys|Hobbys|Hobbys");
t_champs[2] = new Array("civilite|M. ou Mme|Herr/Frau", "nom|Nom|Name", "prenom|Prénom|Vorname", "adresse|Adresse|Adresse", "email|E-mail|Email", "nationalite|Nationalité|Nationalität", "niveau|Je parle allemand");
t_champs[3] = new Array("civilite|M. ou Mme|Herr/Frau", "nom|Nom|Name", "prenom|Prénom|Vorname", "adresse|Adresse|Adresse", "cp|CP|PLZ", "ville|Ville|Stadt", "tel_prive|Tel privé|Tel. Privat", "nationalite|Nationalité|Nationalität", "mon_francais|Je parle allemand|Ich spreche Französisch");
t_champs[4] = new Array("ecole_type|Type d'établissement", "ecole_nom|Nom de l'établissement", "adresse|Adresse", "cp|CP", "ville|Ville", "prof_nom|Nom du contact");

// variable globale pour compter le nombre de cases cochées
var nb_coches  = 0;

function controle_formulaire(formulaire, ichamp, sprache) {
	var champs = decouper_tableau(t_champs[ichamp], sprache);
	var champs_noms = champs[0];
	var champs_libs = champs[1];
	var ch_erreur = "";
	var indefini;
	// suppression éventuelle des textes entre « et »
	for (i=0;i<formulaire.elements.length;i++) {
		if ((formulaire.elements[i].type == "text") || (formulaire.elements[i].type == "textarea")) {
			if (formulaire.elements[i].value.indexOf("«") == 0) formulaire.elements[i].value = "";
		}
	}
	// contrôle des champs indiqués dans t_champs[ichamp]
	for (i=0;i<champs_noms.length;i++) {
	  	var champ = champs_noms[i];
		var controle = eval("formulaire."+champ);
		var champ_type = controle.type;
		var champ_valeur = controle.value;
        if (champ.indexOf("email") != -1) 
        	ch_erreur += controle_email(champ_valeur, champs_libs[i], sprache);
        else if (champ.indexOf("date") != -1) 
        	ch_erreur += controle_date(champ_valeur, champs_libs[i], sprache);
        else if (champ_type == "text")
        	ch_erreur += controle_texte(champ_valeur, champs_libs[i], sprache);
        else if (champ_type == "textarea")
        	ch_erreur += controle_textarea(champ_valeur, champs_libs[i], sprache);
		else if (champ_type == indefini) {
			ch_erreur += controle_case(controle, champs_libs[i], sprache);
		}
  	}
	// contrôles spécifiques au formulaire
	ch_erreur += controles_specifiques(formulaire, ichamp);
  	if (ch_erreur) {
    	if (sprache == "fr")
      		alert("Votre message n'a pas été envoyé pour les raisons suivantes :\n" + ch_erreur); 
		else if (sprache == "de")
      		alert("Ihre Nachricht konnte aus folgenden Gründen nicht gesendet werden :\n" + ch_erreur);
		return false;
  	}
  	else return true; 
}

// contrôles spécifiques à un formulaire
function controles_specifiques(formulaire, ichamp) {
	var erreur = "";
	with (formulaire) {
		switch (ichamp) {
			case 2 :	
				// si nationalite="autre", il faut remplir autre_nationalite
				if ((nationalite[2].checked) && (!autre_nationalite.value))
					erreur += "- vous n'avez pas indiqué votre nationalité\n";
				// si profession="autre", il faut remplir autre_profession
				if ((profession[1].checked) && (!autre_profession.value))
					erreur += "- vous n'avez pas indiqué votre profession\n";
				break;
			case 3 :
				// si pas étudiant, indiquer sa profession
				if ((!etudiant.checked) && (!profession.value)) {
					erreur += "- bitte füllen Sie das Feld 'Mein Beruf' aus\n";
				}
				break;
			case 4 :
				// soit téléphone soit mobile contact
				if ((!prof_tel.value) && (!prof_mobile.value)) {
					erreur += "- un numéro de tel. ou de mobile est indispensable pour la personne à contacter\n";
				}
				break;
		}
	}
	return erreur;
}	

// contrôle si un champ texte est vide
function controle_texte(champ, libelle, langue) {
  	if (champ == "") {
    	if (langue == "fr") return "- le champ '" + libelle + "' n'a pas été rempli\n";
		else return "- bitte füllen Sie das Feld '" + libelle +  "' aus\n";
  	}
  	else return "";
}

// contrôle un champ textarea (champ texte multilignes),
// selon les navigateurs, le contenu d'un champ textarea n'est pas vide, même s'il apparaît vide,
// aussi contrôle-t-on si le texte contient au moins une voyelle
function controle_textarea(champ, libelle, langue) {
	if ((champ == "") || (!champ.match("[a|e|i|o|u|y]"))) {
    	if (langue == "fr") return "- le champ '" + libelle + "' n'a pas été rempli\n";
		else return "- bitte füllen Sie das Feld '" + libelle +  "' aus\n";
  	}
  	else return "";
}

// contrôle un champ radio ou checkbox
function controle_case(champ, libelle, langue) {
	// contrôle un champ "radio" ou "checkbox" 
	var erreur = "";
	var i = 0;
	while (i < champ.length) {
		if (champ[i].checked) nb_coches++;
		i++;
	}
	if (nb_coches == 0) erreur = "- vous n'avez coché aucune case du champ \"" + libelle + "\"\n";
	else {
		if (nb_coches > 1) {
			for (i=0;i<champ.length;i++) champ[i].name += "[]";
		}
		nb_coches = 0;
	}
	return erreur;
}

// contrôle si le champ e-mail a été rempli, et si l'adresse est conforme
function controle_email(champ, libelle, langue) {
  	if (champ == "") {
    	if (langue == "fr") return "- vous n'avez pas indiqué l'adresse e-mail (" + libelle + ")\n";
		else return "- bitte geben Sie die Emailadresse an (" + libelle + ")\n";
  	}
  	else if (!champ.match("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$")) {
    	if (langue == "fr") return "- l'adresse e-mail (" + libelle + ") n'est pas une adresse valide\n";
		else return "- die Emailadresse (" + libelle + ") ist nicht gültig\n";
  	}
  	else return "";
}

function controle_date(champ, libelle, langue) {
    /*
 	var erreur = false;
 	var pivot = 30;
 	ctl = /^(\d\d?)(\/|-|\.)(\d\d?)(\/|-|\.)(\d\d)(\d\d)?$/;
 	var tab = champ.match(ctl);
 	if (!tab) erreur = true;
 	else {
   		if ((tab.length == 6) || (!tab[6]))
     		tab[5] = ((tab[5] < pivot) ? 2000 : 1900) + parseInt(tab[5]);
   		else tab[5] = parseInt(tab[5].concat(tab[6]));
   		var unedate = new Date(tab[5], parseInt(tab[3])-1, tab[1]);
   		if ((unedate.getFullYear() != tab[5]) || (unedate.getMonth() != tab[3]-1) || (unedate.getDate() != tab[1]))
   	 	erreur = true;
 	}
 	if (erreur) {
   		if (langue == "fr") return "- la date (" + libelle + ") n'est pas une date valide\n";
   		else return "- die Date (" + libelle + ") ist nicht gültig\n";
 	}
 	else return "";
	*/
	return "";
}

// découpe un tableau contenant des éléments "val0|val1" ou "val0|val1|val2|..."
// en 2 sous-tableaux contenant les éléments "val0", et un des "valx" suivants, selon le numéro de langue (de 1 à N)
function decouper_tableau(champs, langue) {
	var result = new Array();
	result[0] = new Array();
	result[1] = new Array();
	for (var i=0;i<champs.length;i++) {
		var valeurs = champs[i].split("|");
		result[0][i] = valeurs[0];
		result[1][i] = (langue == "fr") ? valeurs[1] : valeurs[2];
	}
	return result;
}
		
function reinit_champs_vides() {
	// permet de récupérer les valeurs initiales des champs non vides et dont la valeur diffère de cette valeur initiale
	with (formulaire) {
		for (i=0;i<elements.length;i++) {
			if ((elements[i].type == "text") || (elements[i].type == "textarea")) {
				if ((elements[i].defaultValue) && (elements[i].value == "")) elements[i].value = elements[i].defaultValue;
			}
		}
	}
}
	

	 
