

/* ###############################################
* Verif d'un formulaire.
* tous les champs dont la classe = "require type_MonType"
* vont etre vérifiés où 
* MonType => (texte,email,date,select)
*
*/
var couleur_de_bordure="#000";
function verification(forme)
{
	// recup de tous les input obligatoires
	var texte_erreur="Vous n'avez pas rempli tous les champs obligatoires...";
	var email_erreur="L'adresse email n'est pas valide...";
	var select_erreur="Choisissez une option dans la liste déroulante...";
	var date_erreur="La date n'est pas valide... format : jj/mm/aaaa";
	
	var counts = getElementsByClass('require',document,'*');
	var i, count, matches, countHolder;
	
	//print_r(counts);
	
	for (i=0; i<counts.length; i++)
	{
		count = counts[i];
		
		// recup du type d'input
		matches = count.className.match(/type_(.*)/)
		count.TheType = RegExp.$1;
		
		switch(count.TheType)
		{
			case'texte':
				if(count.value == '')
				{
					alert (texte_erreur);count.focus();colore(count.id);
					return false;
				}
				
				init(count.id);
				break;
				
			case'email':
				if(count.value == '')
				{
					alert (texte_erreur);count.focus();colore(count.id);
					return false;
				}
				
				if( !(verifMail(count.value)) )
				{
					alert (email_erreur);count.focus();colore(count.id);
					return false;				
				}
				
				init(count.id);	
				break;
				
			case'date':
				if(count.value == '')
				{
					alert (texte_erreur);count.focus();colore(count.id);
					return false;
				}
				
				if( !(verifDate(count.value)) )
				{
					alert (date_erreur);count.focus();colore(count.id);
					return false;				
				}
				
				init(count.id);	
				break;
				
			case'select':
				if (count.selectedIndex == 0)
				{
					alert (select_erreur);count.focus();colore(count.id);
					return false;
				}
				
				init(count.id);	
				break;
		}
	}
	
}

/* ###############################################
* Verif d'une @ email
*
*
*
*/
function verifMail(mail)
{
  var sigle,mail,N;
  var valide=true;
  
  // si il y a un espace, ou si le champs est vide, non valide
  if (mail.lastIndexOf(' ')!=-1 || mail==''){return(false);}
  
  // s'il y a plus qu'un @ ou si @ n'existe pas dans la chaine
  if ((mail.indexOf('@')!=mail.lastIndexOf('@')) || mail.indexOf('@')==-1) {return(false)}
  
  chaine=mail.substring(mail.indexOf('@'),mail.lastIndexOf('.'));//la ss chaine entre @ et .
  
  //Un minimum de 2 caract entre @ et '.' et aussi minimum de 2 caract apres le dernier '.'
  if ((chaine.length<2)||((mail.substring(mail.lastIndexOf('.'))).length<2)){return(false)}
  
  // Mini 1 caract avant @
  if (mail.substring(0,mail.indexOf('@')).length<1){return(false)} 
  
  // pas de succession de point "...." avant l'@
  //MIEUX: if (mail.indexOf('..')!=-1){return false}
  chaine=mail.substring(0,mail.indexOf('@'));//ss chaine de 0 Ó l'@
  n=chaine.length;
  for (i=0;i<n;i++)
  {
    if (chaine.charAt(i)=='.' && chaine.charAt(i+1)=='.'){return(false)}
  }
  return(true);
}

function verifCP(cp)
{
  if (cp.length!=5)
  {return false;}  
  else {return true;}
}

/* ###############################################
* 
*/
function verifDate(chaineDate)
{
   if (chaineDate == "") return false;
   //date formatée en JJ/MM/AAAA
   var ladate = (chaineDate).split("/")

   // Si je n'ai pas récupéré trois éléments ou bien s'il ne s'agit pas d'entiers, pas la peine non plus d'aller plus loin
   if ((ladate.length != 3) || isNaN(parseInt(ladate[0])) || isNaN(parseInt(ladate[1])) || isNaN(parseInt(ladate[2]))) 
   {
	   //date formatée MySQL
	   ladate = (chaineDate).split(" ");
	   ladate = (ladate[0]).split("-");
	   if ((ladate.length != 3) || isNaN(parseInt(ladate[0])) || isNaN(parseInt(ladate[1])) || isNaN(parseInt(ladate[2])))
	   {
		   //alert("Mauvais format de date : ecrire une date de la forme \"JJ/MM/AAAA\" ou \"AAAA-MM-JJ\"");
		   return false;
	   }
	   else {a=ladate[0];ladate[0]=ladate[2];ladate[2]=a}
   }

   // Sinon, c'est maintenant que je crée la date correspondante. Attention, les mois sont étalonnés de 0 à 11
   var unedate = new Date(eval(ladate[2]),eval(ladate[1])-1,eval(ladate[0]))

   var annee = unedate.getYear()
   if ((Math.abs(annee)+"").length < 4) annee = annee + 1900

   // Il ne reste plus qu'à vérifier si le jour, le mois et l'année obtenus sont les mêmes que ceux saisis par l'utilisateur.
   if (((unedate.getDate() == eval(ladate[0])) && (unedate.getMonth() == eval(ladate[1])-1) && (annee == eval(ladate[2]))) == false )
   {
	   alert ("Votre date n'est pas valide!");
   	   return false;
   }
   return true;
}

/* ###############################################
* 
*
*/
function formatMysqlDate(chaineDate,champDate)
{
	var ladate = (chaineDate).split("/");
	champDate.value=ladate[2]+"/"+ladate[1]+"/"+ladate[0];
}

/* ###############################################
* Coloration du border d'un input
*
*
*
*/
function colore(id)
{
	with(document.getElementById(id).style) 
	{
      	borderColor="#ff0000";
    }
}
function init(id)
{
	with(document.getElementById(id).style) 
	{
      	borderColor=couleur_de_bordure;
    }
}

/* ###############################################
* fonction équivalente de print_r de php
*
*
*
*/
function print_r(input)
{
	var ret;
	for(var i in input)
	{
		ret +="["+i+"] = "+input[i]+"\n";
	}
	alert(ret);
}

/* ###############################################
* possibilité d'appeller plusieurs id différents pour 
* obtenir un tableau d'éléments à parcourir ensuite : 
* var el = $('id1', 'id2', 'id3');. 
*
* fonction de Matthew Pennell : 
* http://www.thewatchmakerproject.com/journal/292/a-better-dollar-function-getelementsbyanything
*
*/
function $() {
	var elements = new Array();
	for (var i=0,len=arguments.length;i<len;i++) {
		var element = arguments[i];
		if (typeof element == 'string') {
			var matched = document.getElementById(element);
			if (matched) {
				elements.push(matched);
			} else {
				var allels = (document.all) ? document.all : document.getElementsByTagName('*');
				var regexp = new RegExp('(^| )'+element+'( |$)');
				for (var i=0,len=allels.length;i<len;i++) if (regexp.test(allels[i].className)) elements.push(allels[i]);
			}
			if (!elements.length) elements = document.getElementsByTagName(element);
			if (!elements.length) {
				elements = new Array();
				var allels = (document.all) ? document.all : document.getElementsByTagName('*');
				for (var i=0,len=allels.length;i<len;i++) if (allels[i].getAttribute(element)) elements.push(allels[i]);
			}
			if (!elements.length) {
				var allels = (document.all) ? document.all : document.getElementsByTagName('*');
				for (var i=0,len=allels.length;i<len;i++) if (allels[i].attributes) for (var j=0,lenn=allels[i].attributes.length;j<lenn;j++) if (allels[i].attributes[j].specified) if (allels[i].attributes[j].nodeValue == element) elements.push(allels[i]);
			}
		} else {
			elements.push(element);
		}
	}
	if (elements.length == 1) {
		return elements[0];
	} else {
		return elements;
	}
}


/* ###############################################
* recup d'element par le nom de sa classe
*
*
*
*/
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}
