// JavaScript Document

/* ********************************* 
Bibliothèque créée par CR.info, Ghislain Rodrigues (contact@crinfo.fr)
v0.20090525
 ********************************* */

//a faire :
/*
-taille minimum/maximum d'un champ


*/

var resultat = new Array();
var val = true;

function Check(){
	for(i in resultat){
		val = val && resultat[i];
	}
	if(val==false){
		val=true;
		return false;
	}
	else{
		return val;
	}
}


function init(sousElem, options){
	if(options.validateon){
		//alert(document.form[0].id);
		var opt = "";
		for(var i in options){
			opt +=", "+i+":'"+options[i]+"'";	
		}
		//initialisation de resultat au cas ou on valide le formulaire directement
		if(!options["requis"] || options["requis"]=="oui"){
			resultat[sousElem]=false;
		}
		else{
			resultat[sousElem]=true;
		}
		if(document.all){
			document.getElementById(sousElem).onblur = function(){valider(sousElem, options)};
		}
		else{
			document.getElementById(sousElem).setAttribute(options.validateon, "valider('"+sousElem+"', {"+opt.substr(1)+"});");
		}
	}
}

function valider(sousElem, options){
	//model : tel, mail, password, confirmpassword, date
	var elem = document.getElementById(sousElem).parentNode;
	var subelem = document.getElementById(sousElem);
	var opt = "";
		for(var i in options){
			opt +=", "+i+":'"+options[i]+"'";	
		}
	if(subelem.value.length==0){ //si pas rempli
		presenceChamp(elem,sousElem,options);
	}
	else{
		if(getElementsByClassNameIE('erreurPresence',elem)[0]){
			getElementsByClassNameIE('erreurPresence',elem)[0].style.display='none';
		}
		switch(options["model"]){
			case "tel":
				var expReg=/^0[-. ]?[1-9]([-. ]?[0-9]){8}$/;
				affErreur(expReg, elem, sousElem);
			break;
			
			//email
			case "mail":
				var expReg=/^[\w\.-]+@[\w\.-]+\.\w+$/i;
				affErreur(expReg, elem, sousElem);
			break
			
			//cpfrench
			case "cp":
				var expReg=/^\d{5}$/;
				affErreur(expReg, elem, sousElem);
			break
			case "passwd":
			break;
			case "confPass":
			break;
			
			//date
			case "date":
				var expReg;
				var sep;
				switch(options['forme']){
					case "aaaa-mm-jj":
						expReg=/^[1-2][0-9]{3}\-[0-9]{2}\-[0-9]{2}$/;
						affErreurDate(expReg, sousElem, elem, "-", options['forme']);
					break;
					case "jj-mm-aaaa":
						expReg=/^\d{2}\-\d{2}\-\d{4}$/;
						affErreurDate(expReg, sousElem, elem, "-", options['forme']);
					break;
					case "jj/mm/aaaa":
						expReg=/^\d{2}\/\d{2}\/\d{4}$/;
						affErreurDate(expReg, sousElem, elem, "/", options['forme']);
					break;
					default:
						expReg=/^\d{4}\-\d{2}\-\d{2}$/;
						affErreurDate(expReg, sousElem, elem, "-", "aaaa-mm-jj");
					break;
				}
			break;
			//pas de model
			default:
				resultat[sousElem]=true;
			break;
		}
	}
}


//fonctions annexes
function calculeNbrJoursMois(mois, annee) {

		var jours = 0;

		switch (mois) {

		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			jours = 31;
			break;

		case 4:
		case 6:
		case 9:
		case 11:
			jours = 30;
			break;

		case 2:
			if (mois == 2 && estBissextile(annee)) {
				jours = 29;
			} else {
				jours = 28;
			}

			break;
		}

		return jours;

	}
	
	function estBissextile(annee) {
		return annee % 4 == 0 && annee % 100 != 0 || annee % 400 == 0;
	}
	
	function estValide(jour, mois, annee){
		return (parseInt(annee) > 1582 && parseInt(mois) >= 1 && parseInt(mois) <= 12 && parseInt(jour) <= calculeNbrJoursMois(parseInt(mois), parseInt(annee)));
	}
	
	
	
	function affErreur(expReg, elem, subElem){
		if (expReg.test(document.getElementById(subElem).value)){
			if(getElementsByClassNameIE('erreurPresence',elem)[0]){
				getElementsByClassNameIE('erreurPresence',elem)[0].style.display='none';
			}
			if(getElementsByClassNameIE('erreurForme',elem)[0]){
				getElementsByClassNameIE('erreurForme',elem)[0].style.display='none';
			}
			resultat[subElem]=true;
		}
		else{
			if(getElementsByClassNameIE('erreurPresence',elem)[0]){
				getElementsByClassNameIE('erreurPresence',elem)[0].style.display='none';
			}
			if(getElementsByClassNameIE('erreurForme',elem)[0]){
				getElementsByClassNameIE('erreurForme',elem)[0].style.display='block';
			}
			resultat[subElem]=false;
		}
	}


function affErreurDate(expReg, subElem, elem, sep, form){
	if (expReg.test(document.getElementById(subElem).value)){
		var bool;var sep;
		var date = document.getElementById(subElem).value.split(sep);
		switch(form){
			case"aaaa-mm-jj":
				bool = estValide(date[2], date[1], date[0]);
				break;
			case"jj-mm-aaaa":
			case"jj/mm/aaaa":
				bool = estValide(date[0], date[1], date[2]);
				break;
			default:
				bool = false;
				break;
		}
		if (bool) {
			getElementsByClassNameIE('erreurForme',elem)[0].style.display='none';
			resultat[subElem]=true;
		}
		else{
			getElementsByClassNameIE('erreurForme',elem)[0].style.display='block';
			resultat[subElem]=false;
		}
	}
	else{
		getElementsByClassNameIE('erreurForme',elem)[0].style.display='block';
			resultat[subElem]=false;
	}
}

function presenceChamp(elem, sousElem, options){
	if(!options["requis"] || options["requis"]=="oui"){
		if(getElementsByClassNameIE('erreurPresence',elem)[0]){
			getElementsByClassNameIE('erreurPresence',elem)[0].style.display='block';
		}
		if(getElementsByClassNameIE('erreurForme',elem)[0]){
			getElementsByClassNameIE('erreurForme',elem)[0].style.display='none';
		}
		resultat[sousElem]=false;
	}
	else{
		if(getElementsByClassNameIE('erreurPresence',elem)[0]){
			getElementsByClassNameIE('erreurPresence',elem)[0].style.display='none';
		}
		if(getElementsByClassNameIE('erreurForme',elem)[0]){
			getElementsByClassNameIE('erreurForme',elem)[0].style.display='none';
		}
		resultat[sousElem]=true;
	}
}

function getElementsByClassNameIE(classe,elem){
	var tabResult = Array();
	var temp = 0;
	if(elem.hasChildNodes()){
		var list = elem.childNodes;
		for(var i = 0;i<list.length;i++){ //pour chaque enfant direct de elem, si sa classe est class alors on l'ajoute dans le tableau
			if(elem.childNodes[i].className == classe){
				tabResult.push(elem.childNodes[i]);
			}
			tabResult.concat(getElementsByClassNameIE(classe,elem.childNodes[i]));
		}
	}
	return tabResult;
}
