
/* {{{ FONCTIONS A LA PHP */

// fonctions pour (de)serializer un tableau javascript
function serialize(a)    { return a.toString(); }
function unserialize(s)  { return s.split(","); }
function trim(s)         { return s.replace(/^\s+/, '').replace(/\s+$/, ''); }
function ltrim(s)        { return s.replace(/^\s+/, ''); }
function rtrim(s)        { return s.replace(/\s+$/, ''); }
function is_array(obj) { return (obj.constructor.toString().indexOf("Array") != -1) }

function strpad(val, longueur, remplissage) {
  if (!isNaN(val)) {
    while ((val.toString().length < longueur)) 
      val = remplissage+val;
    return val;
  }
  else return false;
}

function print_r (theObj, stripfunctions) {
  if (theObj.constructor == Array || theObj.constructor == Object) {
    document.write('<ul>');
    for (var p in theObj) {
      if (theObj[p].constructor == Array || theObj[p].constructor == Object) {
        document.write('<li>['+p+'] => '+typeof(theObj)+'<\/li>');
        document.write('<ul>');
        print_r(theObj[p], stripfunctions);
        document.write('<\/ul>');
      } 
      else {
        if ((stripfunctions && theObj[p].substr(0, 8) != 'function') || !stripfunctions)
          document.write('<li>['+p+'] => '+theObj[p]+'<\/li>');
      }
    }
    document.write('<\/ul>');
  }
  else {
    document.write(theObj);
  }
}

function print_pre(theObj, color, name, stripfunctions) {
    if (stripfunctions !== false) stripfunctions = true;
    document.write('<pre');
    if (color) document.write(' style="color: '+color+'"');
    document.write('>');
    if (name) document.write(name+' : ');
    print_r(theObj, stripfunctions);
    document.write('<\/pre>');
}

function strip_tags (tags) {
    stripped = tags.replace(/<[^<>]*>/gi, "");
    return stripped;
}

Array.prototype.in_array = function(search_term) {
   for (var i = 0; i < this.length; ++i) {
      if (this[i] === search_term) {
         return true;
      }
   }
   return false;
}

function now () { // incomplet mais tout de mÃªme utile 
    var today = new Date(); 
    today_str = today.getFullYear()+'-'+strpad(today.getMonth()+1,2,'0')+'-'+strpad(today.getDate(),2,'0'); 
    return today_str; 
}

/* }}} */


/* {{{ FONCTIONS PRATIQUES POUR FORMULAIRES */

/* renvoie l'objet du DOM coche (dans le cas d'un bouton radio), dans un formulaire donne eventuellement */
function getCheckedElementByTagName(tagname, form) {
    if (form) {
        var obj     = document.forms[form].elements[tagname];
    }
    else {
        var obj     = document.getElementsByName(tagname);
    }

    var lg      = obj.length;
    var valeur  = false;
    var found   = false;
    var i       = 0;

    for (; i < obj.length; ++i) {
        if (obj[i].checked) {
            found  = true;
            valeur = obj[i].value;
            break;
        }
    }
    if (found) return obj[i];
    else return false;
}

/* vide un input type=text quand on "clique" dessus ssi il est initialise a sa valeur par defaut */
function vide_onevent(event,id,name,val) {
  var cur_val;
  cur_val = document.getElementById(id).value;
  
  switch (event) {
    case 'focus': 
      if (cur_val == name) {
        document.getElementById(id).value = val;
      }
      break;
    case 'blur': 
      if (!cur_val.length || cur_val == name) {
        document.getElementById(id).value = name;
      }
      break;
  }
}

/* demande une confirmation avant de rediriger vers une url */
function if_confirm (url, message, blank) {
  if (confirm(message)) { document.location = url; }
}

/* compare 2 champs et met a jour un div selon qu'ils sont identiques ou non. pratique en onkeyup, onblur et onclick pour pass et pass_confirm */
function compare_fields (field1, field2, id_span_ok, inner_no, inner_yes, min_length) {
    val1 = document.getElementById(field1).value;
    val2 = document.getElementById(field2).value;
    if (val1 == val2 && (!min_length || (val1.length >= min_length))) {
        document.getElementById(id_span_ok).innerHTML = inner_yes;
        return 1;
    }
    else {
        document.getElementById(id_span_ok).innerHTML = inner_no;
        return 0;
    }
}

/* valide le format d'une adresse email */
function valide_email (email) {
    reg = /^\s*[a-z0-9\._-]+@([a-z0-9-]+\.)+[a-z0-9]+\s*$/i;
    return email.match(reg);
}

/* valide le format d'une adresse email avec 2e champ pour confirmation et met a jour un div selon qu'ils sont identiques ou non. pratique en onkeyup, onblur et onclick pour les email et email_confirm */
function valide_email_confirm (field1, field2, id_span_ok, inner_no, inner_yes, min_length, icase) {
    val1 = document.getElementById(field1).value;
    val2 = document.getElementById(field2).value;

    if (icase) {
        val1 = val1.toLowerCase();
        val2 = val2.toLowerCase();
    }

    if (val1 == val2 && (!min_length || (val1.length >= min_length)) && valide_email(val1) && valide_email(val2)) {
        document.getElementById(id_span_ok).innerHTML = inner_yes;
        return 1;
    }
    else {
        document.getElementById(id_span_ok).innerHTML = inner_no;
        return 0;
    }
}

/* valide les caractÃ¨res d'un nombre, avec taille min */
function valide_num (field, id_span_ok, inner_no, inner_yes, min_length, max_length) {
    reg = /^[0-9]+$/i;
    return valide_champ(field, '', id_span_ok, inner_no, inner_yes, min_length, max_length, reg);
}

/* valide les caractÃ¨res d'un login, avec taille min */
function valide_login (field, id_span_ok, inner_no, inner_yes, min_length, max_length) {
    reg = /^[a-z0-9@\._-]+$/i;
    return valide_champ(field, '', id_span_ok, inner_no, inner_yes, min_length, max_length, reg);
}

/* valide les caractÃ¨res d'une chaine alphanumerique, avec taille min */
function valide_alnum (field, id_span_ok, inner_no, inner_yes, min_length, max_length) {
    reg = /^[a-z0-9]+$/i;
    return valide_champ(field, '', id_span_ok, inner_no, inner_yes, min_length, max_length, reg);
}

/* valide les caractÃ¨res d'un numero de telephone, avec taille min */
function valide_tel (field, id_span_ok, inner_no, inner_yes, min_length, max_length) {
    reg = /^[0-9()+ \.-]+$/i;
    return valide_champ(field, '', id_span_ok, inner_no, inner_yes, min_length, max_length, reg);
}

/* valide un code_postal */
function valide_cp (field, id_span_ok, inner_no, inner_yes) {
    reg = /^[a-z0-9]+$/i;
    return valide_champ(field, '', id_span_ok, inner_no, inner_yes, 5, 5, reg);
}

/* verifie que la valeur du champ field correspond a l'une des valeurs du tableau liste */
function value_is_in (field, liste, id_span_ok, inner_no, inner_yes, min_length, max_length) {
    var obj = document.getElementsByName(field);
    var lg = obj.length;
    var valeur;
    for (i = 0; i < obj.length; ++i) {
        if (obj[i].checked) {
            valeur = obj[i].value;
            break;
        }
    }

    if (liste.in_array(valeur)) {
        document.getElementById(id_span_ok).innerHTML = inner_yes;
        return 1;
    }
    else {
        document.getElementById(id_span_ok).innerHTML = inner_no;
        return 0;
    }
}

/* valide si un champ est rempli, avec taille min, taille max, et expreg de validation des caracteres autorises */
function valide_champ (field, form, id_span_ok, inner_no, inner_yes, min_length, max_length, reg) {
    // valeurs par defaut
    if (!id_span_ok) id_span_ok = field+'_ok';
    if (!inner_no)   inner_no  = '*';
    if (!inner_yes)  inner_yes = ' ';
    if (!min_length) min_length = 1;

    if (is_array(field)) { // valide_champ renvoie vrai si et seulement si au moins un element du tableau est ok
        valide = 0;
        cnt = field.length;
        for (i=0; i < cnt; ++i) {
            valide += parseInt(valide_champ(field[i], form, id_span_ok, inner_no, inner_yes, min_length, max_length, reg));
        }

        if (valide) {
            document.getElementById(id_span_ok).innerHTML = inner_yes;
            return 1;
        }
        else {
            document.getElementById(id_span_ok).innerHTML = inner_no;
            return 0;
        }
    }

    retour = 1;
    is_radio = 0;
    
    champ = '';

    // on essaye d'abord de recuperer la valeur par le name dans un formulaire donne, eventuellement
    obj = getCheckedElementByTagName(field, form);
    if (obj) {
        champ = obj.value;
        is_radio = 1;
    }
    else { // sinon on recupere par l'id
        obj = document.getElementById(field);
        if (obj) champ = obj.value;
    }

    champ = trim(champ);

    min_length = parseInt (min_length);
    max_length = parseInt (max_length);

    // teste la taille
    if ((max_length && (champ.length > max_length))
     || (min_length && (champ.length < min_length))) {
        retour = 0;
    }

    // evite que la fonction retourne vrai quand on n'a pas selectionne d'element pour des boutons radio. Ne fonctionne pas sous IE...
    if (is_radio && champ == false) retour = 0;

    // teste la conformite a l'expreg
    if (retour && (reg && champ.match(reg) || !reg)) {
        document.getElementById(id_span_ok).innerHTML = inner_yes;
        return 1;
    }
    else {
        document.getElementById(id_span_ok).innerHTML = inner_no;
        return 0;
    }
}

/* incremente la valeur numerique d'un champ input avec l'increment passe en parametre, eventuellement negatif. */
function increment (obj, increment, min_val) {
    var val = parseInt(obj.value); 
    if (isNaN(val)) val = 0; 
    if ((val > min_val && increment < 0) || (increment > 0)) val = val + increment; 
    return val; 
}

/* appelee en onkeyup sur un textarea source, met a jour de le div destination avec le contenu du textarea. */
function maj_div (id_source, id_destination) {

    var src = document.getElementById(id_source); 
    var dst = document.getElementById(id_destination); 
    var contenu = src.value; 

    var reg_Open  = new RegExp(/\[(big|small)\]/); 
    var reg_Close = new RegExp(/\[\/(big|small)\]/); 

    // on utilise la regexp pour pouvoir utiliser le flag "g" !
    var reg_Script  = new RegExp("</*script.*", "g"); 
    var reg_Spaces  = new RegExp(" ", "g"); 
    var reg_Html1   = new RegExp("<", "g"); 
    var reg_Html2   = new RegExp(">", "g"); 
    var reg_Br      = new RegExp("\n", "g"); 

    // filtre le contenu html
    contenu = contenu.replace(reg_Script, ""); 
    contenu = contenu.replace(reg_Spaces, "&nbsp;"); 
    contenu = contenu.replace(reg_Html1, "&lt;"); 
    contenu = contenu.replace(reg_Html2, "&gt;"); 

    // remplacements sur le contenu rÃ©cupÃ©rÃ©
    // ENCODE LES BALISES OUVRANTES
    var i = 100;    // on utilise une boucle car on ne peut pas utiliser le flag "g" sur l'expression rÃ©guliÃ¨re
    while (contenu != contenu.replace(reg_Open, '<$1>') && i) {
        contenu = contenu.replace(reg_Open, '<$1>'); 
        --i; 
    }
    // ENCODE LES BALISES FERMANTES
    var i = 100;    // on utilise une boucle car on ne peut pas utiliser le flag "g" sur l'expression rÃ©guliÃ¨re
    while (contenu != contenu.replace(reg_Close, '</$1>') && i) {
        contenu = contenu.replace(reg_Close, '</$1>'); 
        --i; 
    }
    // ENCODE LES RETOURS A LA LIGNE
    contenu = contenu.replace(reg_Br, "<br />"); 

    dst.innerHTML = contenu; 

}

/* encadre le texte selectionnÃ© dans un textarea avec des balises prÃ©dÃ©finies (sorte de bbcode). */
function modif_selection (txtarea, effet) {
    
    txtarea = document.getElementById(txtarea); 

    switch (effet) {
        case  'big' :
            tagOpen = new Array('\[big\]', '<big>'); 
            tagClose = new Array('\[/big\]', '</big>'); 
            break; 
        case  'small' :
            tagOpen = new Array('\[small\]', '<small>'); 
            tagClose = new Array('\[/small\]', '</small>'); 
            break; 
        default :   // clean
            tagOpen = new Array('\\\[[^\\\] ]*\\\]', ''); 
            tagClose = new Array('\\\[/[^\\\] ]*\\\]', ''); 
            break; 
    }

    var reg_Open  = new RegExp(tagOpen[0],  "g");     // on utilise la regexp pour pouvoir utiliser le flag "g" !
    var reg_Close = new RegExp(tagClose[0], "g");     // on utilise la regexp pour pouvoir utiliser le flag "g" !

    if (document.selection  && document.selection.createRange) { // IE/Opera
        txtarea.focus();
        var range = document.selection.createRange();
        selText = range.text;
        if (effet == 'clean') {
            selText = selText.replace (reg_Open, tagOpen[1]); 
            selText = selText.replace (reg_Close, tagClose[1]); 
            range.text = selText; 
        }
        else {
            range.text = tagOpen[0] + selText + tagClose[0]; 
        }
    }
    else { // Mozilla
        var startPos = txtarea.selectionStart;
        var endPos = txtarea.selectionEnd;
        beforeText = txtarea.value.substring(0, startPos); 
        selText = txtarea.value.substring(startPos, endPos);
        afterText = txtarea.value.substring(endPos, txtarea.value.length);
        if (effet == 'clean') {
            selText = selText.replace (reg_Open, tagOpen[1]); 
            selText = selText.replace (reg_Close, tagClose[1]); 
            txtarea.value = beforeText + selText + afterText; 
        }
        else {
            txtarea.value = beforeText + tagOpen[0] + selText + tagClose[0] + afterText; 
        }
    }

    maj_div ('src_promo', 'dst_promo'); 
    txtarea.focus(); 

}

/* }}} */


/* {{{ FONCTIONS FLASH */

/* ecrire le code HTML pour integrer un flash, et contourne la restriction IE, en conservant la validite XHTML */
function integrer_flash (largeur, hauteur, chemin, title) {
    document.write("<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0' width='"+largeur+"' height='"+hauteur+"' title='"+title+"'>\n");
    document.write("<param name='movie' value='"+chemin+"' />\n");
    document.write("<param name='quality' value='high' />\n");
    document.write("<embed src='"+chemin+"' quality='high' pluginspage='http://www.macromedia.com/go/getflashplayer' type='application/x-shockwave-flash' width='"+largeur+"' height='"+hauteur+"'></embed> \n");
    document.write("</object>\n");
}

/* }}} */


/* {{{ FONCTIONS SHOW/HIDE */

/* show/hide un element du DOM, et change la source d'une image en fonction de l'Ã©tat cachÃ©/affichÃ© */
function showhide (eltid, eltimg, img_reduire, img_restaurer, path, forceshow, visible) {
    if (!img_reduire) img_reduire = 'img/reduire.png';
    if (!img_restaurer) img_restaurer = 'img/restaurer.png';

    if (!visible) {
        oldval = document.getElementById(eltid).style.display;
        newval = (oldval == 'none') ? 'block' : 'none';
        if ('block' == forceshow) newval = 'block';
        if ('none'  == forceshow) newval = 'none';
        newimg = (newval == 'block') ? path+img_reduire : path+img_restaurer;
        if (eltimg) eltimg.src= newimg;
         zindex = (newval == 'block') ? '7' : '1';
        document.getElementById(eltid).style.display = 'none';
        document.getElementById(eltid).style.zIndex = zindex;
        document.getElementById(eltid).style.display = newval;
        // if ('block' == forceshow) fade_element('tableau_error_handler');
    }
    else {
        oldval = document.getElementById(eltid).style.visibility;
        newval = (oldval == 'hidden') ? 'visible' : 'hidden';
        if ('visible' == forceshow) newval = 'visible';
        if ('hidden'  == forceshow) newval = 'hidden';
        newimg = (newval == 'visible') ? path+img_reduire : path+img_restaurer;
        if (eltimg) eltimg.src= newimg;
        zindex = (newval == 'visible') ? '7' : '1';
        document.getElementById(eltid).style.visibility = 'hidden';
        document.getElementById(eltid).style.zIndex = zindex;
        document.getElementById(eltid).style.visibility = newval;
        // if ('block' == forceshow) fade_element('tableau_error_handler');
    }
}

/* open (display:'block') un element du DOM */
function opendiv (eltid) { if (document.getElementById(eltid)) document.getElementById(eltid).style.display = 'block'; }

/* close (display:'none') un element du DOM */
function closediv (eltid) { document.getElementById(eltid).style.display = 'none'; }

/* vide (innerHTML = '') un element du DOM */
function empty_div (eltid) { document.getElementById(eltid).innerHTML = ''; }

/* }}} */


function f_CheckAll(p_Valeur, p_Type){
	var v_Return=true
	switch (p_Type){
		case "integer" :
			v_Return=f_CheckNumerique(p_Valeur)
		break;
		
		case "decimal" :
			v_Return=f_CheckDecimal(p_Valeur)
		break;
		
		case "decimalnolimit" :
			v_Return=f_CheckDecimalNoLimit(p_Valeur)
		break;
		
		case "taux" :
			v_Return=f_CheckNumerique(p_Valeur)
			if (v_Return==true){
				v_Return=f_CheckTaux(parseInt(p_Valeur))
			}
			
		break;
		
		case "varchar" :
			v_Return=f_CheckChaineVide(p_Valeur)
		break;
		
		case "date" :
			v_Return=f_CheckDate(p_Valeur)
		break;

		case "dateslash" :
			v_Return=f_CheckDateSlash(p_Valeur)
		break;
		
		case "datetiret" :
			v_Return=f_CheckDateTiret(p_Valeur)
		break;		
		
		case "heuredeuxpoint" :
			v_Return=f_CheckHeureDeuxPoint(p_Valeur)
		break;				
		
		case "codepostal" :
			v_Return=f_CheckCodePostal(p_Valeur)
		break;
		
		case "telephone" :
			v_Return=f_CheckTelephone(p_Valeur)
		break;
		
		case "url" :

		break;
		
		case "email" :

		break;
		
		case "numerosecu" :
			v_Return=f_CheckNumeroSecu(p_Valeur)
		break;
		
		case "organisme" :
			v_Return=f_CheckOrganisme(p_Valeur)
		break;
		
		case "ribets" :
			v_Return=f_CheckRIBEts(p_Valeur)
		break;
		
		case "ribguichet" :
			v_Return=f_CheckRIBGuichet(p_Valeur)
		break;
		
		case "ribcompte" :
			v_Return=f_CheckRIBCompte(p_Valeur)
		break;

		case "ribcle" :
			v_Return=f_CheckRIBCle(p_Valeur)
		break;

		case "decimalsigne" :
			v_Return=f_CheckDecimalSigne(p_Valeur)
		break;
		
		default:

		break;
		
	}
  return (v_Return)
}

function f_LTrim(p_Chaine){
	var v_RetourChaine=""
	if (p_Chaine==""){
		return (v_RetourChaine)
	}
	else{
		v_RetourChaine=p_Chaine
	}

	while(''+v_RetourChaine.charAt(0)==' '){
		v_RetourChaine=v_RetourChaine.substring(1, v_RetourChaine.length)
	}
	return (v_RetourChaine)
}

function f_RTrim(p_Chaine){
	var v_RetourChaine=""
	if (p_Chaine==""){
		return (v_RetourChaine)
	}
	else{
		v_RetourChaine=p_Chaine
	}

	while(''+v_RetourChaine.charAt(v_RetourChaine.length-1)==' '){
		v_RetourChaine=v_RetourChaine.substring(0, v_RetourChaine.length-1)
	}
	return (v_RetourChaine)
}



function f_CheckDate(p_Date){
	var v_Return=true
	
	if (p_Date.length!=8){
		v_Return=false
		return(v_Return)
	}
	
	var v_Date=new String(p_Date)
	var v_Jour=v_Date.substr(6, 2)
	var v_Mois=v_Date.substr(4, 2)
	var v_Annee=v_Date.substr(0, 4)

	var v_Jour_Int
	var v_Mois_Int
	var v_Annee_Int
	var v_Bissextile=false

	

	if (f_LTrim(f_RTrim(v_Jour))=="" || f_LTrim(f_RTrim(v_Mois))=="" || f_LTrim(f_RTrim(v_Annee))==""){
		v_Return=false
		return (v_Return)
	}
				
	if (isNaN(v_Jour) || isNaN(v_Mois) || isNaN(v_Annee)){
		v_Return=false
		return (v_Return)
	}

	v_Jour_Int=parseInt(v_Jour,10)
	v_Mois_Int=parseInt(v_Mois,10)
	v_Annee_Int=parseInt(v_Annee,10)

	if (parseInt(v_Mois,10)<1 || parseInt(v_Mois,10)>12){
		v_Return=false
		return (v_Return)
	}

	if (v_Mois_Int==1 || v_Mois_Int==3 || v_Mois_Int==5 || v_Mois_Int==7 || v_Mois_Int==8 || v_Mois_Int==10 || v_Mois_Int==12){
		if (parseInt(v_Jour,10)<1 || parseInt(v_Jour,10)>31){
			v_Return=false
			return (v_Return)
		}
	}
	if (v_Mois_Int==4 || v_Mois_Int==6 || v_Mois_Int==9 || v_Mois_Int==11){
		if (parseInt(v_Jour,10)<1 || parseInt(v_Jour,10)>30){
			v_Return=false
			return (v_Return)
		}
	}
	if (v_Mois_Int==2){
		if (v_Annee_Int%400==0){
			v_Bissextile=true
		}
		else{
			if (v_Annee_Int%100==0){
				v_Bissextile=false
			}
			else{
				if (v_Annee_Int%4==0){
					v_Bissextile=true
				}
			}
		}

		if (v_Bissextile==true){
			if (parseInt(v_Jour,10)<1 || parseInt(v_Jour,10)>29){
				v_Return=false
				return (v_Return)
			}
		}
		else{
			if (parseInt(v_Jour,10)<1 || parseInt(v_Jour,10)>28){
				v_Return=false
				return (v_Return)
			}
		}
	}
	return (v_Return)
}


function f_CheckDateSlash(p_Date){

	var v_Return=true
	
	if (p_Date=="") {
		return true;
	}
	
	var v_Date = p_Date
	
	var v_TabDate = v_Date.split("/");
	
	if (v_TabDate.length==3) {
		var v_Jour = v_TabDate[0];
		var v_Mois = v_TabDate[1];
		var v_Annee = v_TabDate[2];
		if(v_Annee.length==2){
			v_Annee='20' + v_Annee;
		}
		if(v_Mois.length==1){
			v_Mois='0' + v_Mois;
		}
		if(v_Jour.length==1){
			v_Jour='0' + v_Jour;
		}
		v_Date = v_Annee + v_Mois + v_Jour;
		v_Return=f_CheckDate(v_Date);
	}
	else {
		v_Return=false;
	}

	return v_Return;
}

function f_CheckDateTiret(p_Date){
	var v_Return=true
	
	if (p_Date=="") {
		return true;
	}
	
	var v_Date = p_Date
	
	var v_TabDate = v_Date.split("-");
	
	if (v_TabDate.length==3) {
		var v_Annee = v_TabDate[0];
		var v_Mois = v_TabDate[1];
		var v_Jour = v_TabDate[2];
		if(v_Annee.length==2){
			v_Annee='20' + v_Annee;
		}
		if(v_Mois.length==1){
			v_Mois='0' + v_Mois;
		}
		if(v_Jour.length==1){
			v_Jour='0' + v_Jour;
		}
		v_Date = v_Annee + v_Mois + v_Jour;
		v_Return=f_CheckDate(v_Date);
	}
	else {
		v_Return=false;
	}

	return v_Return;
}


function f_CheckHeureDeuxPoint(p_Heure){
	var v_Return=true
	if (p_Heure=="") {
		return true;
	}
	
	var v_Heure = p_Heure;
	
	var v_TabHeure = v_Heure.split(":");
	if (v_TabHeure.length==2) {
		var v_Heure = v_TabHeure[0];
		var v_Seconde = v_TabHeure[1];		

		if(v_Heure.length==1){
			v_Heure='0' + v_Heure;
		}
		if(v_Seconde.length==1){
			v_Seconde='0' + v_Seconde;
		}
		v_Heure = v_Heure + v_Seconde;
		v_Return=v_Heure;	
	}
	else {
		v_Return=false;
	}

	return v_Return;
}


function f_CheckNumerique(p_Nombre){
	var v_Return=true
	v_Chaine = new String(p_Nombre);
	re = /^\d{1,}$/;
	if ( ! re.test(v_Chaine) ){
		v_Return=false
		return (v_Return)
	}
	return (v_Return)
}

function f_CheckDecimal(p_Nombre){
	var v_Return=true
	var re = /,/g
	var v_Chaine = new String(p_Nombre.replace(re,'.'));

	if(v_Chaine.indexOf('.')!=v_Chaine.lastIndexOf('.')){
		//alert("Une seule virgule est autorisée")
		v_Return=false
		return (v_Return)
	}
	
	re = /^\d{1,}\.?\d{0,2}$/
	if ( ! re.test(v_Chaine) ){
		//alert("N'est pas un nombre à 2 décimales")
		v_Return=false
	}
	return (v_Return)
}

function f_CheckDecimalNoLimit(p_Nombre){
	var v_Return=true
	var re = /,/g
	var v_Chaine = new String(p_Nombre.replace(re,'.'));

	if(v_Chaine.indexOf('.')!=v_Chaine.lastIndexOf('.')){
		//alert("Une seule virgule est autorisée")
		v_Return=false
		return (v_Return)
	}
	
	re = /^\d{1,}\.?\d+$/
	if ( ! re.test(v_Chaine) ){
		//alert("N'est pas un nombre correct")
		v_Return=false
	}
	return (v_Return)
}


function f_CheckDecimalSigne(p_Nombre){
	var v_Return=true
	var re = /,/g
	var v_Chaine = new String(p_Nombre.replace(re,'.'));

	if(v_Chaine.indexOf('.')!=v_Chaine.lastIndexOf('.')){
		//alert("Une seule virgule est autorisée")
		v_Return=false
		return (v_Return)
	}
	
	if(v_Chaine.indexOf('-')!=v_Chaine.lastIndexOf('-')){
		//alert("Seul le signe moins \(-\) est autorisé")
		v_Return=false
		return (v_Return)
	}
	
	re = /^-?\d{1,}\.?\d{0,2}$/
	if ( ! re.test(v_Chaine) ){
		//alert("N'est pas un nombre à 2 décimales")
		v_Return=false
	}
	return (v_Return)
}

function f_CheckTaux(p_Nombre){
	var v_Return=true
	if (p_Nombre<0 || p_Nombre>100){
		v_Return=false
		return (v_Return)
	}
	return (v_Return)
}

function f_CheckTelephone(p_Nombre){
	var v_Return=true
	v_Chaine = new String(p_Nombre);
	re = /^\d{10}$/;
	if ( ! re.test(v_Chaine) ){
		v_Return=false
		return (v_Return)
	}
	return (v_Return)
}

function f_CheckCodePostal(p_Nombre){
	var v_Return=true
	v_Chaine = new String(p_Nombre);
	re = /^\d{5}$/;
	if ( ! re.test(v_Chaine) ){
		v_Return=false
		return (v_Return)
	}

	re = /^[0]{5}$/;
	if ( re.test(v_Chaine) ){
		v_Return=false;
		return (v_Return);
	}

	return (v_Return)
}

function f_CheckChaineVide(p_Chaine){
	var v_Return=true
	v_Chaine = new String(p_Chaine);
	re = /\w{1,}/;
	if ( ! re.test(v_Chaine) ){
		v_Return=false
		return (v_Return)
	}
	return (v_Return)
}


function f_CheckNumeroSecu(p_NumeroSecu){
	var v_Return=true
    v_Chaine = new String(p_NumeroSecu);
    v_Numero = v_Chaine.substr(0,13)
    v_Cle = v_Chaine.substr(13,2)
    
    re = /^\s*(\d)\s*[-.]?\s*(\d\d)\s*[-.]?\s*(\d\d)\s*[-.]?\s*(\d\d)\s*[-.]?\s*(\d\d\d)\s*[-.]?\s*(\d\d\d)\s*$/;
    if ( ! re.test(v_Numero) ){
		v_Return=false
        return (v_Return);
	}
    v_NumeroSecu = new Number(v_Numero.replace(re,"$1$2$3$4$5$6"));
    v_Calcul_Cle = 97-(v_NumeroSecu%97);
	if (v_Calcul_Cle!=v_Cle){
		v_Return=false
        return (v_Return);
	}
    //CHAMP_SECU.value = v_Numero.replace(re,"$1 $2 $3 $4 $5 $6");
    return (v_Return);
}

function f_CheckOrganisme(p_Organisme){
	var v_Return=true
    v_Chaine = new String(p_Organisme);
	re = /^\d{11}$/;
    if ( ! re.test(v_Chaine) ){
		v_Return=false
        return (v_Return);
	}
    return (v_Return);
}

function f_CheckRIBEts(p_Nombre){
	var v_Return=true
	v_Chaine = new String(p_Nombre);
	re = /^\d{5}$/;
	if ( ! re.test(v_Chaine) ){
		v_Return=false
		return (v_Return)
	}
	return (v_Return)
}

function f_CheckRIBGuichet(p_Nombre){
	var v_Return=true
	v_Chaine = new String(p_Nombre);
	re = /^\d{5}$/;
	if ( ! re.test(v_Chaine) ){
		v_Return=false
		return (v_Return)
	}
	return (v_Return)
}

function f_CheckRIBCompte(p_Chaine){
	var v_Return=true
	v_Chaine = new String(p_Chaine);
	re = /^\w{11}$/;
	if ( ! re.test(v_Chaine) ){
		v_Return=false
		return (v_Return)
	}
	return (v_Return)
}

function f_CheckRIBCle(p_Nombre){
	var v_Return=true
	v_Chaine = new String(p_Nombre);
	re = /^\d{2}$/;
	if ( ! re.test(v_Chaine) ){
		v_Return=false
		return (v_Return)
	}
	return (v_Return)
}



function f_EmailCheck (p_Email) {

	var emailPat=/^(.+)@(.+)$/

	var specialChars="\\(\\)<>@,;':\\\\\\\"\\.\\[\\]\*"

	var validChars="\[^\\s" + specialChars + "\]"

	var quotedUser="(\"[^\"]*\")"

	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/

	var atom=validChars + '+'

	var word="(" + atom + "|" + quotedUser + ")"

	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")

	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

	var matchArray=p_Email.match(emailPat)
	if (matchArray==null) {
		return false
	}
	var user=matchArray[1]
	var domain=matchArray[2]

	if (user.match(userPat)==null) {
	    return false
	}

	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) {
		  for (var i=1;i<=4;i++) {
		    if (IPArray[i]>255) {
			return false
		    }
	    }
	    return true
	}

	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
	    return false
	}

	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length
	if (domArr[domArr.length-1].length<2 || 
	    domArr[domArr.length-1].length>4) {
	   return false
	}

	if (len<2) {
	   var errStr="Cette adresse e-mail n'a pas d'hôte!"
	   return false
	}

	return true;
}


function f_CheckPwd(p_Pwd){
	if (p_Pwd.length==0){
		return false;
	}
	else{
		for (i=0;i<p_Pwd.length;i++){
			if (p_Pwd.charAt(i)==" " || p_Pwd.charAt(i)=="&" || p_Pwd.charAt(i)=="'"){
				return false;
			}
		}
	}
	return true;
}


function montre(id) {
    var d = document.getElementById(id);
    for (var i = 1; i <= 10; ++i) {
	if (document.getElementById('sub'+i)) { document.getElementById('sub'+i).style.display = 'none'; }
    }
    if (d) { d.style.display='block'; }
}

