// * \file form.js
// * \author Romain Daniel
// * \version 0.1
// * \date 23 avril 2009

//fonction de verification principale appelee lors d'un clic sur le bouton Valider des formulaires
function verif(frm) {

	switch(frm) {
		case 'portal': //formulaire portal
  		var login = document.portal.loginp.value; //contenu du champ login
  		var mdp = document.portal.mdpp.value; //mot de passe
  		if(check(login,frm)=='ok' && check_pwd(mdp,frm)=='ok') return true;
  		else return false;
		break;
		case 'creer_i': //creer intervenant
  		var login_i = document.creer_i.log_c.value;
  		var mdp_i = document.creer_i.mdp_c.value;
  		var email = document.creer_i.mail_c.value;
  		if(check(login_i,frm)=='ok' && check_pwd(mdp_i,frm)=='ok' && check_email(email)=='ok') return true;
  		else return false;
		break;
		case 'modif': //modifier intervenant
  		var nouv_mdp = document.modif.mdp_m.value;
  		var nom = document.modif.liste_i.value;
  		var pass = check_pwd(nouv_mdp,frm);
  		if(pass=='ok') {
  			var conf = confirmation(nom,"modifier");
  			if(conf=='ok') {
					return true;
				}
				else return false;
			}
			else return false;
		break;
		case 'supp': //supprimer intervenant
			var nom = document.supp.liste_s.value;
			if(confirmation(nom,"supprimer")=='ok') return true;
			else return false;
		break;
		case 'cr_inv': //creer invite
  		var login_inv = document.cr_inv.log_inv.value;
  		var mdp_inv = document.cr_inv.mdp_inv.value;
  		if(check(login_inv,frm)=='ok' && check_pwd(mdp_inv,frm)=='ok') return true;
  		else return false;
		break;
		case 'cree': //creer intervention
  		var desc = document.cree.desc_c.value;
  		if(check_desc(desc,frm)=='ok') return true;
  		else return false;
		break;
		case 'mod': //modifier intervention
  		var nouv_desc = document.mod.desc_mo.value;
  		if(check_desc(nouv_desc,frm)=='ok') return true;
  		else return false;
		break;
		case 'desc_form':
			tinyMCE.triggerSave(true,true); //sinon il faut valider 2 fois pour recuperer le contenu de la zone de texte...
  		var desc = document.desc_form.desc_d.value;
  		//var desc = tinyMCE.get('desc_d').getContent();
  		if(check_desc(desc,frm)=='ok') {
  			alert("Description enregistree temporairement, vous pouvez fermer la fenetre");
  			//parent.parent.GB_hide(); //ferme la fenetre popup mais foire le reste...?!
  			return true;
			}
  		else return false;
		break;
	}

}

function check(zone,frm) {

	var res='nok';
	var flag=0; //drapeau indiquant si un caractere non autorise a ete entre ou non
	
  for(var i=0;i<zone.length;i++) {
  	if(zone.charAt(i) == " " || zone.charAt(i) == "\n" || zone.charAt(i) == "\t") {
			flag=1;
		} //si au moins un caractere de la chaine est un espace, un saut de ligne, ou une tabulation
  }
  
	//si les champs ne contiennent pas de caracteres non autorises et sont non vides
  if (flag !=1 && zone != "") {
  	res='ok';
  }
  
  else {
  	alert("Au moins un des champs est vide, contient un espace, saut de ligne, ou tabulation");
  	res='nok';
	}
	
	return res;
	
}

//verif d'un pass plus securise a revoir (carac spec...)
function check_pwd(mdp,frm) {

	var res='nok';
	var flag=0; //drapeau indiquant si un caractere non autorise a ete entre ou non
	var nombre=0;
	var autre=0;
	
	//si au moins un caractere de la chaine est un espace, un saut de ligne, ou une tabulation
  for(var i=0;i<mdp.length;i++) {
  	if(mdp.charAt(i) == " " || mdp.charAt(i) == "\n" || mdp.charAt(i) == "\t") {
			flag=1;
		}
  }
  
  //si au moins un caractere de la chaine est un chiffre
  for(var i=0;i<mdp.length;i++) {
  	if(!isNaN(mdp.charAt(i))) {nombre=1;}
  }
  
  //si au moins un caractere de la chaine n'est pas un chiffre
  for(var i=0;i<mdp.length;i++) {
  	if(isNaN(mdp.charAt(i))) {autre=1;}
  }

  //si les champs ne contiennent pas de caracteres non autorises et sont non vides
  if (flag !=1 && nombre!=0 && autre!=0 && mdp.length>5) {
  	res='ok';
  }
  
  else {
  	alert("Le mot de passe doit faire plus de 5 caracteres, comporter des lettres/chiffres, et ne doit pas comporter des caracteres interdits");
  	res='nok';
	}
	
	return res;
	
}

//verifie la validite de l'email par REGEXP
function check_email(email) {
	var mail = email.toLowerCase(); //autorise donc d'entrer une adresse en majuscule
	var res='nok';
	//l'expr regarde si l'email commence par une lettre, chiffre, point, tiret, ou underscore ; il doit y avoir au moins un de ces caracteres
	//ensuite l'email doit contenir le caratere @ et au moins 2 caracteres parmi ceux cites au dessus
	//enfin il doit y avoir le caractere . et entre 2 et 4 lettres
  var reg = /^[a-z0-9\._-]+@[a-z0-9\.-]{2,}[.][a-z]{2,4}$/; //les antislash sont soulignes dans DevPHP, mais c'est la seule façon de prendre en compte le point
  if (reg.exec(mail)!=null) {res='ok';}
  else {alert("Adresse Email invalide"); res='nok';}
  return res;
}

//affiche un message popup de confirmation lorsqu'on veut modifier ou supprimer un intervenant et retourne le resultat du choix effectue sur le popup
function confirmation(nom,action) {
	var res='nok';
	var rep = window.confirm("Etes-vous sur de vouloir "+action+" l'intervenant "+nom+" ?");
	if (rep) {res='ok';}
	else {res='nok';}
	return res;
}

//verifie si le champ description des formulaires creer et modifier intervention n'est pas vide
function check_desc(zone,frm) {

	var res='nok';

	//si le champ est vide
  if (zone == "" || zone == " " || zone == "<br>" || zone == "<p>&nbsp;</p>") {
  	alert("La zone de texte est vide");
  	res='nok';
  }
  
  else {
  	res='ok';
	}
	
	return res;
	
}


/*** Fonctions appelees avant la validation des formulaires ***/


//utilisee pour afficher un champ permettant de creer un nouveau titre d'intervention
function afficherChamp(formulaire) {
	if(formulaire.ajout.checked == true) {formulaire.ajoutitre.type = 'text';} //si la case est cochee, le champ n'est plus masque
	if(formulaire.ajout.checked == false) {formulaire.ajoutitre.type = 'hidden';}
}

//modifie l'url de la page en cours selon telle valeur selectionnee dans la liste deroulante
function afficherDesc() {
	var valeur = document.getElementById('idliste').options[document.getElementById('idliste').selectedIndex].value;
	var param = window.location.search; //?page=modifierIntervention&val=X&id=X
	var val = param.split("&"); //[0]=?page=modifierIntervention [1]=val=X [2]=id=X
	
	if (valeur == "Faites votre choix") window.location.replace("index.php?page=modifierIntervention&val=X&id=X");
	else window.location.replace("index.php?page=modifierIntervention&"+val[1]+"&id="+valeur);
}

function verifierCase(formulaire,numero) {

	switch(numero) {
		case 1:
			var formu=formulaire.clientok;
		break;
		case 2:
			var formu=formulaire.dateok;
		break;
		case 3:
			var formu=formulaire.etatok;
		break;
		case 4:
			var formu=formulaire.interok;
		break;
		case 5:
			var formu=formulaire.typeok;
		break;
		default:
			alert("erreur");
		break;
	}

	if(formu.checked == true) {
		
		switch(formulaire.temp.value) {
		
			case '0': //si aucune case n'est cochee, l'etat vaut 0
				formulaire.temp.value = numero;
			break;
			
			default: //mais si une autre case est cochee, on cree un nouvel etat de valeurs concatenees
			
				var taille = formulaire.temp.value.length;
				
				//si le dernier element de la chaine est superieur au numero a concatener (ex : 145 + 3)
				if (formulaire.temp.value.charAt(taille-1) > numero) { //charAt(0)=1er element d'une chaine
				
					for(var i=0;i<taille;i++) {
  					if (formulaire.temp.value.charAt(i) < numero) var prec = i; //ex : prec=1
  				}
				
					var chaineg = formulaire.temp.value.substring(0,prec+1); //ex : 145 -> 1
					var chained = formulaire.temp.value.substring(prec+1,taille); //145 -> 45
					formulaire.temp.value = chaineg+numero+chained; //1345
					
				} //ceci permet de toujours avoir une chaine de nombres croissants
				
				else formulaire.temp.value += numero;
				
			break;
		}

	}
	
	//si sur plusieurs cases cochees une case est decochee, on supprime la 1ere occurence d'un caractere de la chaine en partant de la gauche
	if(formu.checked == false) {
	
		var taille = formulaire.temp.value.length;
		
		if (taille < 2) formulaire.temp.value = '0'; //pour une case cochee qu'on decoche, on precise qu'il n'y a plus de cases cochees
		
		//mais si plus d'une case cochee
		else {
			var position = formulaire.temp.value.indexOf(numero,0);
			var chaineg = formulaire.temp.value.substring(0,position);
			var chained = formulaire.temp.value.substring(position+1,taille);
			formulaire.temp.value = chaineg+chained;
		}
		
	}
	
}

