function isBissextile(annee) {
    if (annee%4!=0) {
        return false;
    }
    if (annee%400==0) {
        return true;
    }
    if (annee%100==0) {
        return false;
    }
    return true;
}
/******
 * 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 champs 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 showalert = true;
	var maxDec=0;
    var i; // sans ça la portée de la variable i se trouve modifiée dans le bloc appelant ce qui pose parfois problème ...
	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;
			case 9:
				showalert = arguments[i];
				break;
		}
	}

	if (value=='') {
		if (required) {
			if(showalert)
				alert(StrReplace(FV_MUST_FILL, '%%field%%', name));
			return false;
		}
		else {
			return true;
		}
	}
	if (value.length<minlength)	{
		if(showalert)
			alert(StrReplace(StrReplace(FV_CHARS_NOT_ENOUGH, '%%field%%', name), '%%minlength%%', minlength));
		return false;
	}
	if (maxlength>0 && value.length>maxlength)	{
		if(showalert)
			alert(StrReplace(StrReplace(FV_CHARS_TOO_MUCH, '%%field%%', name), '%%maxlength%%', maxlength));
		return false;
	}
	if (type=='integer') {
		//value=parseInt(value);
		//if (isNaN(value)) {
		// SPR 22/04/04 Modification de la fonction, car échec lors du test de certaines valeurs (ex: 45d passait)
		if (!(parseInt(value,10)==value)) {
			if(showalert)
				alert(StrReplace(FV_NOT_A_NUMBER, '%%field%%', name));
			return false;
		}
	
	}
    else if (type=='float') {
        value=parseFloat(value);
        if (isNaN(value)) {
			if(showalert)
            	alert(StrReplace(FV_NOT_A_NUMBER, '%%field%%', name));
            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 champs '"+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) {
					if(showalert)
						alert(StrReplace(StrReplace(FV_DECIMALS_TOO_MUCH, '%%field%%', name), '%%maxdecs%%', maxDec));
					return false
				}
			}
        }
    }
    else if (type=='date') {
    	vals=value.split('/');
        bok=true;
        if (vals.length!=3) {
        	bok=false;
        }
        for (i=0; i<vals.length && bok; i++) {
            //value=parseInt(vals[i]);
            //if (isNaN(value)) {
						// SPR 22/04/04 Modification de la fonction, car échec lors du test de certaines valeurs (ex: 45d passait)
						if (!(parseInt(vals[i],10)==vals[i])) {
	            bok=false;
            }
            else {
            	switch (i) {
                	case 0:
                    	jour=vals[i];
                        if (jour<1 || jour>31) {
                            bok=false;
                        }
                    	break;
                    case 1:
                        mois=vals[i];
                        if (mois<1 || mois>12) {
                        	bok=false;
                        }
                    	break;
                    case 2:
                        annee=vals[i];
                    	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;
                    }
                }
            }
        }
        if (!bok) {
			if(showalert)
            	alert("Le format du champs '"+name+"' est incorrect. Le bon format est 'jj/mm/aaaa'.");
            return false;
        }
    }
    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) {
			if(showalert)
				alert(StrReplace(FV_INVALID_EMAIL,'%%field%%',name));
        	return false;
        }
    }
    else if (type=='telephone') {
    	// accepte des numériques, l'espace, le tiret et le + (uniquement en début)
        if (value.match(/^\s*(\+){0,1}(\d| |\.|-)+\s*$/g)==null) {
			if(showalert)
            	alert("Le champs '"+name+"' ne contient pas un telephone valide.");
            return false;
        }
    }
	if (minVal!=null && value<minVal) {
		if(showalert)
			alert(StrReplace(StrReplace(FV_NUMERIC_TOO_MUCH, '%%field%%', name), '%%minval%%', minVal));
		return false;
	}
	if (maxVal!=null && value>maxVal) {
		if(showalert)
			alert(StrReplace(StrReplace(FV_NUMERIC_NOT_ENOUGH, '%%field%%', name), '%%maxval%%', 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;
}

//	--------------------------------------------------------------------------------
//	StrReplace remplace toutes les occurences d'une chaine dans une autre
//	dans le format souhaité et retourne une chaîne de caractères
//
//	Arguments:	<Chaine de caractères à éditer>
//				<chaine recherchée>
//				<chaine de remplacement>
//				[<nombre d'occurences>]	(optionel, par défaut illimité)
//
//	D. GIRE	27/12/00
//
//	----------------//
function StrReplace(whSourceString,whSearchString,whReplaceString)
{
	var whLast;
	var nOccurences;
	
	(StrReplace.arguments.length==4)?nOccurences=StrReplace.arguments[3]+1:nOccurences=-1;

	if(whSourceString.search(whSearchString)==-1)
		{
		return whSourceString;
		}
	else
		{
			whlast="";
			while(whSourceString!=whLast && nOccurences--!=0)
				{
				whLast=whSourceString;
				whSourceString=whSourceString.replace(whSearchString,whReplaceString);
				}
			return whLast;
		}
}
