function validateT (Field, obl, min, max) {
	// Texte
	erreurs="";
	var v = Field.value;
	var l = v.length;
	erreurs += _obl(obl, l);

  erreurs += _long(l, min, max);
  
  return _erreur(Field, erreurs);	
}

function validateN (Field, obl, minn, maxn) {
	// Numérique
	erreurs="";
	var v = Field.value;
	var l = v.length;
	erreurs += _obl(obl, l);

	if (isNaN(v)) {
		erreurs += "-> Doit être numerique\n";
	}
	if (!isNaN(v) && l>0) {
		if (minn && (v<minn)) {
			erreurs +="-> Doit être supérieur à "+minn+"\n";
		}
		if (maxn && (v>maxn)) {
			erreurs +="-> Doit être inférieur à "+maxn+"\n";
		}
	}
	
  return _erreur(Field, erreurs);	
}

function validateM (Field, obl) {
  // Mail
	erreurs="";
	var v = Field.value;
	var l = v.length;
	erreurs += _obl(obl, l);

	if (l>0) {
		if ((v.indexOf("@") == -1) || (v.charAt(0) == ".") || (v.charAt(0) == "@") || (l < 6) || (v.indexOf(".") == -1) || (v.charAt(v.indexOf("@")+1) == ".") || (v.charAt(v.indexOf("@")-1) == ".")) { 
			erreurs += "-> Doit être un email\n"; 
		}
	}
	
	return _erreur(Field, erreurs);
}

function validateH (Field, obl) {
  // heure HH:MM
	erreurs="";
	var v = Field.value;
	var l = v.length;
	erreurs += _obl(obl, l);

	if (l>0) {
		if ( l != 5 ) {
			erreurs += "-> Doit être du format HH:MM\n";
		} else {
			h=parseInt(v.charAt(0)+v.charAt(1));
			m=parseInt(v.charAt(3)+v.charAt(4));
			if ( ( h > 23 ) || ( m > 59 ) || ( v.charAt(2) != ':' ) ) {
				erreurs += "-> Doit être du format HH:MM\n";
			}
		}
	}
	
	return _erreur(Field, erreurs);
}

function validateD( Field, obl, inFMT ) {
  // date
	erreurs="";
	var v = Field.value;
	var l = v.length;
	erreurs += _obl(obl, l);
	
	if ( ! _validateD(Field, inFMT) ) {
	  erreurs += "-> Doit être du format "+inFMT+"\n";
	}
	
	if (erreurs) {
		alert("Les erreurs suivantes sont apparues :\n"+erreurs);
		Field.focus();
		Field.select();
		return false;
	}
	else {
	  return true;
	}
}

function validateForm(frm) {
  // alert('a');
  el = frm.elements;
  for (i = 0; i < el.length; i++) {
    if (el[i].act) {
      ev = 'ret = '+el[i].act.replace( /this/ , 'document.'+frm.name+'.'+el[i].name );
      eval(ev);
      if  ( ! ret ) {
        return false;
      }
    }
  }
  frm.submit();
}

function egalite(field1, field2, label1, label2) {
	if (field1.value != field2.value) {
		alert("'" + label1 + "' et '" + label2+"' sont différents !");
		field1.value="";
		field2.value="";
		field1.focus();
		return false;
	}
	return true;
}

function _obl(obl, len) {
	erreurs="";
	// obligatoire
	if (obl && len == 0) {
		erreurs = "-> Champ obligatoire\n";
	}
	return erreurs;
}

function _long(l, min, max) {
  erreurs="";
	// entre min et max 
	if (min && max && (l < min || l > max)) { 
		if (min != max) {
			erreurs += "-> Doit contenir entre "+ min +" et "+ max +" symboles\n";
		} else {
			erreurs += "-> Doit contenir "+ min +" symboles\n";
		}
	} 
	else if (min && !max && (l < min)) { 
		erreurs += "-> Doit contenir au moins "+min+" symboles\n";
	}
	else if (max && !min &&(l > max)) { 
		erreurs += "-> Doit contenir au plus "+max+" symboles\n";
	}
  return erreurs;
}

function _erreur(Field, erreurs) {
	if (erreurs) {
		alert("Les erreurs suivantes sont apparues :\n"+erreurs);
		Field.select();
		Field.focus();
		return false;
	}
	return true;
}

var _aDel =
[
 "/",
 "-",
 ":"
];

var _aFmt =
[
 ["jjmmaaaa", "0", "1", "2"],
 ["jjaaaamm", "0", "2", "1"],
 ["mmjjaaaa", "1", "0", "2"],
 ["mmaaaajj", "2", "0", "1"],
 ["aaaammjj", "2", "1", "0"],
 ["aaaajjmm", "1", "2", "0"],
 ["ddmmyyyy", "0", "1", "2"],
 ["ddyyyymm", "0", "2", "1"],
 ["mmddyyyy", "1", "0", "2"],
 ["mmyyyydd", "2", "0", "1"],
 ["yyyymmdd", "2", "1", "0"],
 ["yyyyddmm", "1", "2", "0"]
];

function _getDel(inFMT) {
  var i = 0, dOK = 0, s = "", fOK = 0, a;
  var sDel = "";
  for (i = 0; i < _aDel.length; i++) {
   if (inFMT.split(_aDel[i]).length == 3) {
    sDel = _aDel[i];
    dOK = 1;
    break;
   }
  };
  if (dOK == 0) {
   // Le delimiteur n'existe pas, on selectionne "/" par defaut
   sDel = _aDel[0];
  }
  return sDel;
}

function _validFMT(inFMT, sDel) {
  var i = 0, dOK = 0, s = "", fOK = 0, a, sDel, sFmt;
  sFmt = inFMT;
  if (inFMT.split(sDel).length != 3) {
    sFmt = "jj/mm/aaaa";
  };
  return sFmt;
}

function _getFmt(inFMT, sDel) {
   var i = 0, dOK = 0, s = "", fOK = 0, a, res;
   a = inFMT.split(sDel);
   for (i = 0; i < a.length; i++) {
    s += a[i];
   };
   for (i = 0; i < _aFmt.length; i++) {
    if (s == _aFmt[i][0]) {
     res = _aFmt[i];
     fOK = 1;
     break;
    }
   };
   if (fOK == 0) {
    // Le format n'existe pas, on selectionne jjmmaaaa par defaut
    res = _aFmt[0];
   }
  return res;
}

function _isLeap( inYEAR )
{
  if (inYEAR % 400 == 0) {
   return true;
  } else if ((inYEAR % 4 == 0) && (inYEAR % 100 != 0)){
   return true;
  } else {
   return false;
  }
};

function _dayIn( inMONTH, inYEAR )
{
  var m = 0;
  if (("§0§§2§§4§§6§§7§§9§§11§").indexOf("§" + inMONTH + "§") >= 0) {
   m = 31;
  } else if (("§3§§5§§8§§10§").indexOf("§" + inMONTH + "§") >= 0) {
   m = 30;
  } else {
   if (_isLeap(inYEAR)) {
    m = 29;
   } else {
    m = 28;
   }
  }
  return m;
};
 
 
function _validateD( Field, inFMT )
{
  if (Field.value.length == 0) {
    return true;
  }
  
  var aD, dD, dM, dY, s, dYDigit, sDel;
  s = Field.value;
  sDel = _getDel(inFMT);
  aD = s.split(sDel);
  inFMT = _validFMT(inFMT, sDel);
  aFmt = _getFmt(inFMT, sDel);
  dD = Math.round(parseFloat(aD[aFmt[1]]));
  dM = Math.round(parseFloat(aD[aFmt[2]])) - 1;
  dY = Math.round(parseFloat(aD[aFmt[3]]));
  s = dY + "";
  dYDigit = s.length;
  if (isNaN(dD)) {
   return false;
  } else if (isNaN(dM)) {
   return false;
  } else if (isNaN(dY)) {
   return false;
  } else if (dY < 1) {
   return false;
  } else if (dD < 1) {
   return false;
  } else if (dM < 0) {
   return false;
  } else if (dM > 11) {
   return false;
  } else if (dYDigit != 4) {
   return false;
  } else if (dD > _dayIn(dM, dY)) {
   return false;
  } else {
   if (dM == 1) {
    if (!_isLeap(dY) && dD == 29) {
     return false;
    } else {
     return true;
    }
   } else {
    return true;
   }
  }
};


