/* 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", "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");
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", "email|E-mail|Email", "nationalite|Nationalité|Nationalität", "enfrance_depuis|En Allemagne depuis|Ich bin Frankreich seit", "enfrance_jusqua|et jusqu'à|und voraussichtlich bis", "mon_francais|Je parle allemand|Ich spreche Französisch", "age|Mon âge|Mein Alter"); 
// formulaire "Au-pair français cherche famille allemande / Deutsches Au Pair sucht französische Familie"
t_champs[10] = new Array("nom|Nom|Name", "adresse|Adresse|Adresse", "tel|Téléphone|Telefon Nummer", "email|E-mail|Email", "date_naissance|Date de naissance|Geburtsdatum", "lieu_naissance|Lieu de naissance|Geburtsort", "sejour_aupair|Période et durée du séjour envisagés|Gewünschter Zeitpunkt und Dauer", "experience_enfants|Expérience des enfants|Gewohnheit mit Kinder", "experience_pair|Expérience au-pair|schon einmal Au-pair", "fratrie|Frères et soeurs|Geschwister", "ecole_actuel|Ecole/fac fréquentée|Schule oder Universität", "etude_langue|Allemand depuis combien d'années|Französisch seit wieviel Jahren");

// formulaire "Famille française cherche Au-pair allemand / Deutsche Gastfamilie sucht Au Pair aus Frankreich"
t_champs[11] = new Array("nom|Nom|Name", "adresse|Adresse|Adresse", "proximite_centre|Proximité centre-ville|Stadtnähe", "tel|Téléphone|Telefon Nummer", "email|E-mail|Email", "enfants|Nombre/âge des enfants|Anzahl/Alter der Kinder", "experience_aupair|Déjà employé au-pair|Schon einmal ein Au Pair", "periode_aupair|Période et durée|Zeitpunkt und Dauer", "conditions_logement|Conditions de logement|Bedingungen der Unterbringung", "conditions_travail|Conditions de travail|Arbeitsanforderungen");



// formulaire "Famille française propose accueil pour allemand / Deutsche Familie bietet Unterkunft für junge Franzosen"
t_champs[12] = new Array("nom|Nom|Name", "adresse|Adresse|Adresse", "proximite_centre|Proximité centre-ville|Stadtnähe", "tel|Téléphone|Telefon Nummer", "email|E-mail|Email", "combien_hotes|Combien d'hôtes|Wie viele Personen", "experience_hote|Déjà famille d’accueil auparavant|Schon einmal Gastfamilie", "periode_hote|Période et durée|Zeitpunkt und Dauer", "enfants|Avez-vous des enfants|Haben Sie Kinder", "animaux|Avez-vous des animaux|Haben Sie Tiere");
// formulaire "Français cherche accueil dans une famille allemande / Französische Gastfamilie gesucht"
t_champs[13] = new Array("nom|Nom|Name", "genre|Fille/garçon|Mädchen/Junge", "adresse|Adresse|Adresse", "tel|Téléphone|Telefon Nummer", "email|E-mail|Email", "date_naissance|Date de naissance|Geburtsdatum", "lieu_naissance|Lieu de naissance|Geburtsort", "periode_sejour|Période et durée du séjour envisagés|Gewünschter Zeitpunkt und Dauer", "raison_sejour|Raison du séjour|Grund des Aufenthalts", "niveau_langue|Allemand depuis combien d'années|Französisch seit wieviel Jahren"); 
// formulaire "Contact"
t_champs[14] = new Array("Nom|Nom|Name", "Email|E-mail|Emailadresse", "message|Message|Nachricht");
// formulaire "Petites annonces"
t_champs[15] = new Array("nom|Nom|", "prenom|Prénom|", "email|E-mail|", "anzeige|Texte de l'annonce|");
t_champs[16] = new Array("nom|Nom|Name", "genre|Fille/garçon|Mädchen/Junge", "adresse|Adresse|Adresse", "tel|Téléphone|Telefon Nummer", "email|E-mail|Email", "date_naissance|Date de naissance|Geburtsdatum", "lieu_naissance|Lieu de naissance|Geburtsort", "periode_sejour|Période et durée du séjour envisagés|Gewünschter Zeitpunkt und Dauer", "periode_sejour_partenaire|Période et durée pour accueillir ton partenaire|Zeitpunkt und Dauer für den Empfang deines Austauschpartners", "fratrie|Frères et soeurs|Geschwister", , "classe_actuelle|Classe actuellement|Klassenstufe zur Zeit", "etude_langue|Allemand depuis combien d'années|Französisch seit wieviel Jahren", "sejours|Séjours en Allemagne|Reise in Frankreich"); 

// 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); 
		if (controle) {
			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);	
		else alert("Votre message n'a pas été envoyé pour les raisons suivantes :\n(Ihre Nachricht konnte aus folgenden Gründen nicht gesendet werden :)\n" + ch_erreur);
		if (ichamp >= 10) return false;
  	}
  	else {
		if (ichamp >= 10) return true;
		else formulaire.submit(); 
	}
}

// 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;
		}
	}
	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 if (langue == "de") return "- bitte füllen Sie das Feld '" + libelle +  "' aus\n";
		else return "- le champ '" + libelle + "' n'a pas été rempli\n(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 if (langue == "de") return "- bitte füllen Sie das Feld '" + libelle +  "' aus\n"; 
		else return	"- le champ '" + libelle + "' n'a pas été rempli\n(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 if (langue == "de") return "- bitte geben Sie die Emailadresse an (" + libelle + ")\n";
		else return "- vous n'avez pas indiqué l'adresse e-mail (" + libelle + ")\n(bitte geben Sie die Emailadresse an (" + libelle + "))\n";
  	}
  	else if (!champ.match(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[_a-z0-9-]+(\.[_a-z0-9-]+)*$/i)) {
    	if (langue == "fr") return "- l'adresse e-mail (" + libelle + ") n'est pas une adresse valide\n";
		else if (langue == "de") return "- die Emailadresse (" + libelle + ") ist nicht gültig\n";
		else return	"- l'adresse e-mail (" + libelle + ") n'est pas une adresse valide\n(die Emailadresse (" + libelle + ") ist nicht gültig)\n";
  	}
  	else return "";
}

function controle_date(champ, libelle, langue) {
 	var erreur = false;
 	ctl = /^([0-9][0-9]?)(\/|-|\.)?([0-9][0-9]?)(\/|-|\.)?([0-9][0-9][0-9][0-9])$/;
 	var tab = champ.match(ctl);
 	if (!tab) erreur = true;
 	else {
   		var unedate = new Date(parseInt(tab[5]), parseInt(tab[3])-1, parseInt(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 if (langue == "de") return "- die Date (" + libelle + ") ist nicht gültig\n";
		else return	"- la date (" + libelle + ") n'est pas une date valide\n(die Date (" + libelle + ") ist nicht gültig)\n";
 	}
 	else 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;
			}
		}
	}
}
	

	 
