function isBissextile(annee) {
    if (annee%4!=0) {
        return false;
    }
    if (annee%400==0) {
        return true;
    }
    if (annee%100==0) {
        return false;
    }
    return true;
}

function formatDate(dateVal) {
	var text='';
	if (dateVal.getDate()<10) {
		text+='0';
	}
	text+=dateVal.getDate();
	text+='/';
	if (dateVal.getMonth()<9) {
		text+='0';
	}
	text+=(dateVal.getMonth()+1);
	text+='/';
	text+=(dateVal.getYear());

	text2=' ';
	if (dateVal.getHours()<10) {
		text2+='0';
	}
	text2+=dateVal.getHours();
	text2+=":";
	if (dateVal.getMinutes()<10) {
		text2+='0';
	}
	text2+=dateVal.getMinutes();
	text2+=":";
	if (dateVal.getSeconds()<10) {
		text2+='0';
	}
	text2+=dateVal.getSeconds();
	if (text2!=' 00:00:00') {
		text+=text2;
	}
	return text;
}
/******
 * Arguments
 * name (string) => nom à afficher en cas d'erreur
 * value (string) => valeur à contrôler
 * type (string) => type de la variable ('string','integer','date')
 * required (booleen) => indique si le champ doit être renseigné
 * minlength (integer) => indique la longueur minimum du texte
 * maxlength (integer) => indique la longueur maximum du texte (0=pas de longueur maximum)
 * minVal (integer) => valeur minimum acceptable (null pas de valeur minimum)
 * maxVal (integer) => valeur maximum acceptable (null pas de valeur maximum)
 * maxDec (integer) => indique le nombre maximum de décimale (0=pas de maximum)
******/
function validateValue()
{
   	var numargs = arguments.length;
	if (numargs<2) {
		alert ("Nombre d'argument incorrect");
		return false;
	}
	var name=arguments[0];
	var value=arguments[1];
	var type="string";
	var required=true;
	var minlength=0;
	var maxlength=0;
	var minVal=null;
	var maxVal=null;
    var maxDec=0;
	for (i=2; i<numargs; i++) {
		switch(i) {
			case 2:
				type=arguments[i];
				break;
			case 3:
				required=arguments[i];
				break;
			case 4:
				minlength=arguments[i];
				break;
			case 5:
				maxlength=arguments[i];
				break;
			case 6:
				minVal=arguments[i];
				break;
			case 7:
				maxVal=arguments[i];
				break;
            case 8:
                maxDec=arguments[i];
                break;
		}
	}

	if (value=='') {
		if (required) {
			alert("Vous devez renseigner le champ '"+name+"'");
			return false;
		}
		else {
			return true;
		}
	}
	if (value.length<minlength)	{
		alert("Le champ '"+name+"' doit comporter au moins "+minlength+" caractère(s)");
		return false;
	}
	if (maxlength>0 && value.length>maxlength)	{
		alert("Le champ '"+name+"' doit comporter au maximum "+maxlength+" caractère(s).");
		return false;
	}
	if (type=='integer') {
        if (value.match(/^\d*$/g)==null) {
			alert("Le champ '"+name+"' est incorrect.");
			return false
		}
		value=parseInt(value,10);
		if (isNaN(value)) {
			alert("Le champ '"+name+"' est incorrect.");
			return false
		}
	}
    else if (type=='float') {
        value=parseFloat(value);
        if (isNaN(value)) {
            alert("Le champ '"+name+"' est incorrect.");
            return false
        }
	    if (maxDec!=null && maxDec>0) {
//        	val=value*Math.pow(10,maxDec); // bug dans IE 1.017*1000=1016.9999999999
//            if (Math.floor(val)!=val) { 
//                alert("Le champ '"+name+"' doit comporter au maximum "+maxDec+" décimale(s).");
//                return false
//            }
			sVal=value.toString();
			vals=sVal.split('.');
			if (vals.length>1) {
				if (vals[1].length>maxDec) {
                    alert("Le champ '"+name+"' doit comporter au maximum "+maxDec+" décimale(s).");
                    return false
				}
			}
        }
    }
    else if (type=='date') {
    	dateparts=value.split(' ');
    	vals=dateparts[0].split('/');
        bok=true;
        if (vals.length!=3) {
        	bok=false;
        }
		var annee=0;
		var mois=0;
		var jour=0;
        for (i=0; i<vals.length && bok; i++) {
            curval=parseInt(vals[i],10);
            if (isNaN(curval)) {
	            bok=false;
            }
            else {
            	switch (i) {
                	case 0:
                    	jour=curval;
                        if (jour<1 || jour>31) {
                            bok=false;
                        }
                    	break;
                    case 1:
                        mois=curval;
                        if (mois<1 || mois>12) {
                        	bok=false;
                        }
                    	break;
                    case 2:
                        annee=curval;
                    	break;
                }
            }
        }
        if (bok) {
            var nbjours = new Array(31,29,31,30,31,30,31,31,30,31,30,31);
    		if (jour>nbjours[mois-1]) {
            	bok=false;
            }
            else if (mois==2) {
            	if (!isBissextile(annee)) {
                	if (jour>28) {
                    	bok=false;
                    }
                }
            }
        }
		var heure=0;
		var minute=0;
		var seconde=0;
        if (bok && dateparts.length>1) {
	    	vals=dateparts[1].split(':');
			if (vals.length<2 || vals.lenght>3) {
				bok=false;
			}
			for (i=0; i<vals.length && bok; i++) {
				curval=parseInt(vals[i],10);
				if (isNaN(curval)) {
					bok=false;
				}
				else {
					switch (i) {
						case 0:
							heure=curval;
							if (heure<0 || heure>23) {
								bok=false;
							}
							break;
						case 1:
							minute=curval;
							if (minute<0 || minute>59) {
								bok=false;
							}
							break;
						case 2:
							seconde=curval;
							if (seconde<0 || seconde>59) {
								bok=false;
							}
							break;
					}
				}
			}
		}
        if (!bok) {
            alert("Le format du champ '"+name+"' est incorrect. Le bon format est 'jj/mm/aaaa [hh:mm[:ss]]'.");
            return false;
        }
		value = new Date(annee, mois-1, jour,heure,minute,seconde,0);
		if (minVal!=null) {
			if (minVal=='now') {
				minVal = new Date();
			}
			else if (minVal=='day') {
				minVal = new Date();
				minVal.setHours(0,0,0,0);
			}
			else {
				minVal = new Date(Date.parse(minVal));
			}
		}
		if (maxVal!=null) {
			if (maxVal=='now') {
				maxVal = new Date();
			}
			else if (minVal=='day') {
				maxVal = new Date();
				maxVal.setHours(23,59,59,999);
			}
			else {
				maxVal = new Date(Date.parse(minVal));
			}
		}
    }
    else if (type=='email') {
        if (value.match(/^\s*([\w\-]+\.)*[\w\-]+@([\w\-]+\.)+(\w\w|aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|arpa)\s*$/g)==null) {
            alert("Le champ '"+name+"' ne contient pas un e-mail valide.");
        	return false;
        }
    }
    else if (type=='telephone') {
 		// accepte si les formats sont 'xx xx xx xx' ou '+xx (x) xxx xxx xxx'
 		// ou si le numero contient des parenthèses
    	if (!validTelephoneNumberFormat(value) && !value.match("\\(\\d+\\)") ) {
    	 	alert("Le champ '"+name+"' ne contient pas un telephone valide. Le format des téléphones et fax doit être 'xx xx xx xx' ou '+xx (x) xxx xxx xxx'");
            return false;
        }
    }
	if (minVal!=null && value<minVal) {
		if (type=='date') {
			minVal=formatDate(minVal);
		}
		alert("Le champ '"+name+"' doit être supérieur ou égal à "+minVal+".");
		return false;
	}
	if (maxVal!=null && value>maxVal) {
		if (type=='date') {
			maxVal=formatDate(maxVal);
		}
		alert("Le champ '"+name+"' doit être inférieur ou égal à "+maxVal+".");
		return false;
	}
	return true;
}

function isRadioChecked(radio) 
{
	var i;
	for (i=0; i<radio.length; i++) {
		if (radio[i].checked)
			return true;
	}
	return false;
}

function RadioValue(radio) 
{
	var i;
	for (i=0; i<radio.length; i++) {
		if (radio[i].checked)
			return radio[i].value;
	}
	return null;
}

function RadioChecked(radio,value)
{
	var i;
	for (i=0; i<radio.length; i++) {
		if (radio[i].value==value) {
			radio[i].checked=true;
		}
	}
}

function GetSelectedIndex(selectInput)
{
	var i;
	for (i=0; i<selectInput.length; i++) {
		if (selectInput[i].selected) {
			return i;
		}
	}
	return null;
}

function GetSelectedText(selectInput)
{
	var i;
	i=GetSelectedIndex(selectInput);
	if (i==null)
		return null;
	return selectInput[i].text;
}

function GetSelectedValue(selectInput)
{
	var i;
	i=GetSelectedIndex(selectInput);
	if (i==null)
		return null;
	return selectInput[i].value;
}

 function verifierMail(mail) {
      if ((mail.indexOf("@")>=0)&&(mail.indexOf(".")>=0)) {
         return true 
      } else {
         alert("Mail invalide ! (format xxxx@xxx.xx)");
         return false
      }
   }
   
 // valide le format d'un numero de téléphone
 // Gère deux formats :
 // Format français : xx xx xx xx xx
 // Format international : +xx (x) xxx xxx xxx
 function validTelephoneNumberFormat(telNumber) {
 	if (telNumber != null) {
	 	// Expression régulière pour un numéro de téléphone français
	 	var regExFrance = "^(\\d{2} ){4}(\\d{2})$";
	 	// Expression régulière pour un numéro de téléphone international 	
	 	var regExInternational = "^\\+\\d{2} \\(\\d\\) ((\\d{3} ){2}(\\d{3}))$";
	
	 	var regFrance = new RegExp(regExFrance, "ig"); 	
	 	var regInternational = new RegExp(regExInternational, "ig");

	    resFrance = telNumber.match(regFrance);
		resInternational = telNumber.match(regInternational);
	    
	 	if (resFrance != null  && resFrance.length == 1)
	 		return true;
	 	else if (resInternational != null  && resInternational.length == 1)
	 		return true;

 	}
 	return false;
 }