//Fonction d'attribution d'un nom de mois
function convertMonth(m){
	var month_name;
	if(m == 1) month_name = "janvier";
	if(m == 2) month_name = "février";
	if(m == 3) month_name = "mars";
	if(m == 4) month_name = "avril";
	if(m == 5) month_name = "mai";
	if(m == 6) month_name = "juin";
	if(m == 7) month_name = "juillet";
	if(m == 8) month_name = "août";
	if(m == 9) month_name = "septembre";
	if(m == 10) month_name = "octobre";
	if(m == 11) month_name = "novembre";
	if(m == 12) month_name = "décembre";
	return(month_name);
}

//Fonction d'attribution d'un nom de jour
function attribDay(d,m,y){
	var v_date = new Date();
	v_date.setFullYear(y,m-1,d);
	var d_temp = v_date.getDay();
	var day_name;
	if(d_temp == 1) day_name = "lundi";
	if(d_temp == 2) day_name = "mardi";
	if(d_temp == 3) day_name = "mercredi";
	if(d_temp == 4) day_name = "jeudi";
	if(d_temp == 5) day_name = "vendredi";
	if(d_temp == 6) day_name = "samedi";
	if(d_temp == 0) day_name = "dimanche";
	return(day_name);
}

//Fonction d'attribution d'une date complète
function convertDate(d,m,y){
	d_temp = attribDay(d,m,y);
	m = convertMonth(m);
	return(d_temp+' '+d+' '+m+' '+y);
}

//Vérification de la validité d'une date
function verifDate(d,m,y){
	if(m==2 && d>28){
		if(!((y%4==0&&y%100!=0)||y%400==0)){
			if(d>28) 
				return(false);
		}
		else{
			if(d>29) 
				return(false);
		}
	}
	if((m==4 || m==6 || m==9 || m==11) && d==31)
		 return(false);
	return(true);
}

//Vérification d'une adresse e-mail
function verifEmail(mail) {
	var ret = true;
	var car = "";
	var carAfter = "";
	var carBefore = "";
	var nbrcar = mail.length;
	var nbrarobase = 0;
	var nbrpoint = 0;
	var goodcar = "@0123456789.-_abcdefghijklmnopqrstuvwxyz";
	for(cnt = 0;cnt < nbrcar;cnt++) {
		var car = mail.substr(cnt,1);
		if(goodcar.indexOf(car) >= 0) {
			carAfter = "";
			carBefore = "";
			if(car == "@") {
				if((cnt-1) >= 0) {
					carBefore = mail.substr((cnt-1),1);
				}
				if((cnt+1) < nbrcar) {
					carAfter = mail.substr((cnt+1),1);
				}
				if(cnt > 0 && nbrarobase == 0 && cnt < (nbrcar-4) && !(carBefore == ".") && !(carAfter == ".") && !(carBefore == "-") && !(carAfter == "-") && !(carBefore == "_") && !(carAfter == "_")) {
					nbrarobase++;
				} 
				else {
					ret = false;
					break;
				}
			}
			if(car == ".") {
				if((cnt-1) >= 0) {
					carBefore = mail.substr((cnt-1),1);
				}
				if((cnt+1) < nbrcar) {
					carAfter = mail.substr((cnt+1),1);
				}
				if(cnt > 0 && cnt < (nbrcar-2) && !(carBefore == ".") && !(carAfter == ".") && !(carBefore == "-") && !(carAfter == "-") && !(carBefore == "_") && !(carAfter == "_")) {
					nbrpoint++;
				} 
				else {
					ret = false;
					break;
				}
			}
		} 
		else {
			ret = false;
			break;
		}
	}
	if(nbrarobase == 0 || nbrpoint == 0 || mail.substr(0,1) == "." || mail.substr(0,1) == "-" || mail.substr(0,1) == "_" || mail.substr((nbrcar-1),1) == "." || mail.substr((nbrcar-1),1) == "-" || mail.substr((nbrcar-1),1) == "_") {
		ret = false;
	}
	return ret;
}

//Vérification d'une adresse e-mail par expressions régulières (apparemment non compatible IE sous Mac)
function is_email(email)
{
	var reg = /^[\w.-]+@[\w.-]+\.\w{1,4}$/
	var reg2 = /[.@]{2,}/
	return ((reg.exec(email)!=null) && (reg2.exec(email)==null))
}

//Vérification d'une adresse url
function is_url(url)
{
	var resultat = true;
    var invalid_char = "²~#'{([|`^)]}°§*";
	var deb_url = "http://";
	var nbrpoint = 0;
	var nbrcar = url.length;
	if(nbrcar < 11)
		resultat = false;
    for(var i = 0;i < 7;i++){
		if(url.substr(i,1) != deb_url.substr(i,1))
			resultat = false;
    }	
    for(var i = 0;i < nbrcar;i++){
		var car = url.substr(i,1);
		if(invalid_char.indexOf(car) > 0){
			resultat = false;
		}
		if(car == ".") {
			var carAfter = "";
			var carBefore = "";
			if((i-1) >= 0) {
				carBefore = url.substr((i-1),1);
			}
			if((i+1) < nbrcar) {
				carAfter = url.substr((i+1),1);
			}
			if(i > 7 && i < (nbrcar-2) && !(carBefore == ".") && !(carAfter == ".") && !(carBefore == "-") && !(carAfter == "-") && !(carBefore == "_") && !(carAfter == "_")) {
				nbrpoint++;
			} 
			else {
				resultat = false;
			}
		}
    }
	if(nbrpoint < 2 || url.substr(7,1) == "." || url.substr(7,1) == "-" || url.substr(7,1) == "_" || url.substr((nbrcar-1),1) == "." || url.substr((nbrcar-1),1) == "-" || url.substr((nbrcar-1),1) == "_") {
		resultat = false;
	}	
	return(resultat);
}

//Contrôle des caractères spéciaux
function control_string(valeur){
	for(k=0;k < valeur.length;k++){
		if(valeur.charAt(k) == '&')
			valeur = valeur.substring(0,k) + '&amp;' + valeur.substring(k+1,valeur.length);
		if(valeur.charAt(k) == '\'' || valeur.charAt(k) == '’' || valeur.charAt(k) == '´')
			valeur = valeur.substring(0,k) + '&#039;' + valeur.substring(k+1,valeur.length);
		if(valeur.charAt(k) == '\"')
			valeur = valeur.substring(0,k) + '&quot;' + valeur.substring(k+1,valeur.length);
		/*if(valeur.charAt(k) == '<')
			valeur = valeur.substring(0,k) + '&lt;' + valeur.substring(k+1,valeur.length);
		if(valeur.charAt(k) == '>')
			valeur = valeur.substring(0,k) + '&gt;' + valeur.substring(k+1,valeur.length);*/
	}
	return(valeur);
}

//Tout ou rien sélectionner ou inverser dans les checkbox
function autoSelect(form, value) {
	var form_id = document.getElementById(form);
	//Boucle sur les éléments du formulaire
	for(var j = 0; j < form_id.elements.length; j++){
		var field = form_id.elements[j];
		if (field.type == 'checkbox') {
			if (value == -1) {
				field.checked = !field.checked;
			} 
			else {
				field.checked = (value==1);
			}
		}		
	}	
}

//Vérifie qu'un élément de formulaire au moins est sélectionné
function checkSelected(form) {
	var form_id = document.getElementById(form);
	var checked = false;
	//Boucle sur les éléments du formulaire
	for(var j = 0; j < form_id.elements.length; j++){
		checked |= form_id.elements[j].checked;
	}
	if (!checked){
		alert('Veuillez selectionner au moins un élément, svp!');
		return (false);
	}
	return (true);
}

//Ajout de balises dans les formulaires
function add_tag(form, champ, tag) {
	var form_id = document.getElementById(form);
	for(var j = 0; j < form_id.elements.length; j++){
		if(form_id.elements[j].name == champ){
			form_id.elements[j].value += tag;
			form_id.elements[j].focus();
		}
	}
}

function add_tag2(form,champ,balise){
	var form_id = document.getElementById(form);
	for(var j = 0; j < form_id.elements.length; j++){
		if(form_id.elements[j].name == champ){
			val = prompt('Texte à mettre en forme:');
			if(val != null){
				form_id.elements[j].value += '['+balise+']'+val+'[/'+balise+']';
				form_id.elements[j].focus();
			}
		}
	}
} 

//Limite la longueur de texte dans un champ
function LimitLongText(field_text, nb_car, field_decompte) { 
	field_text.onclick = function(){IsFull(field_text, nb_car, field_decompte)}; 
	field_text.onblur = function(){IsFull(field_text, nb_car, field_decompte)}; 
	field_text.onkeyup = function(){IsFull(field_text, nb_car, field_decompte)}; 
	field_text.onkeypress = function(){IsFull(field_text, nb_car, field_decompte)}; 
} 

function IsFull(field_text, nb_car, field_decompte) { 
	if (field_text.value.length <= nb_car) { 
		field_decompte.value = nb_car - field_text.value.length; 
		return true; 
	} 
	else { 
		field_text.value = field_text.value.substr(0, nb_car); 
		field_decompte.value = nb_car - field_text.value.length; 
		return false; 
	} 
}

//Contrôle de formulaire
function verif_form(){
	var formulaires = document.getElementsByTagName('form');
	var goodcar_msg = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZéèêàäëïöüç,;.:!?-_() ";

	//Boucle sur les formulaires
	for(var i = 0; i < formulaires.length; i++){
		formulaires[i].onsubmit = function(){ 

			//Boucle sur les éléments du formulaire
			var inputs = this.elements;
			for(var j = 0; j < inputs.length; j++){

				//Extraction des champs obligatoires
				var critere;
				if(inputs[j].type == 'hidden' && inputs[j].name == 'obligatory'){
					var tab_obl = new Array();
					var limite;
					if(inputs[j].value.indexOf(',') >= 0){
						tab_obl = inputs[j].value.split(',');
						limite = tab_obl.length;
					}
					else{
						tab_obl = inputs[j].value;
						limite = 1;
					}
				}

				//Si c'est une date
				if(inputs[j].type == 'hidden' && inputs[j].size == 100){
					var valeur;
					if(inputs[j+4].type == 'checkbox' && inputs[j+4].checked){
						d=new Date();
						mois = d.getMonth() + 1;
						valeur = d.getFullYear()+'-'+mois+'-'+d.getDate();
					}
					/*else{
						if((inputs[j+5].type == 'checkbox' && inputs[j+5].checked) || (inputs[j+6].type == 'checkbox' && inputs[j+6].checked)){
							var last_date = 0;
							for(var k = 0; k < inputs.length; k++){
								if(last_date == 0 && inputs[k].type == 'hidden' && inputs[k].size == 100){
									valeur = inputs[k].value;
									last_date++;
								}
							}
						}*/
						else{
							var jour = inputs[j+1].value;
							var mois = inputs[j+2].value;
							var annee = inputs[j+3].value;
							if(!verifDate(jour,mois,annee)){
								alert('Cette date n\'est pas valable!');
								return(false);
							}
							valeur = annee+'-'+mois+'-'+jour;
							if(inputs[j+4].name.substring(0,6) == 'Heure_'){
								var heure = inputs[j+4].value;
								var min = inputs[j+5].value;
								valeur += ' '+heure+':'+min+':00';
							}
							for(var k = 0; k < limite; k ++){
								if(limite == 1)
									critere = tab_obl;
								else
									critere = tab_obl[k];
								if((jour == '00' || mois == '00' || annee == '0000') && inputs[j].name == critere){
									alert('Entrez une date cohérente dans '+inputs[j].name+'!');
									return(false);
								}
							}
						}
					//}
					inputs[j].value = valeur;	
				}

				//Si un champ obligatoire est vide
				for(var k = 0; k < limite; k ++){
					if(limite == 1)
						critere = tab_obl;
					else
						critere = tab_obl[k];
					if(inputs[j].name == critere && inputs[j].value.length == 0){
						alert('Veuillez entrer quelque chose dans le champ ' + inputs[j].name +' svp !');	
						inputs[j].focus();
						return(false);
					}
				}

				//Si un autre élément est non-vide
				if(inputs[j].value.length != 0){
	
					//Si c'est un mail
					if(inputs[j].name == 'email' && !is_email(inputs[j].value)){
						alert('Cette adresse e-mail est invalide !');
						inputs[j].focus();
						return(false);
					}
	
					//Si c'est un lien
					if(inputs[j].name == 'Lien'){
						if(inputs[j].value == "http://"){
							 inputs[j].value = '';
						}
						else{
							if(!is_url(inputs[j].value)){
								alert('Ce lien est invalide !');
								inputs[j].focus();
								return(false);
							}	
						}
					}
	
					//Si c'est un mot de passe à confirmer
					if(inputs[j].id == 'Password1'){
						if(inputs[j].value != inputs[j+1].value){
							alert('Mot de passe non confirmé !');
							inputs[j+1].focus();
							return(false);
						}
						/*else{
							inputs[j+2].value = inputs[j].value;
						}*/
					}
				}
			}
			for(var j = 0; j < inputs.length; j++){
				//Contrôle des caractères spéciaux
				inputs[j].value = control_string(inputs[j].value);
			}
			return(true);
		};
	}
}