/*---------------------------------------------------------------*/
/* ATTENTION :                                                   */
/* NE JAMAIS FINIR UNE LIGNE PAR UN CARACTÈRE ACCENTUÉ (SURTOUT  */
/* DANS LES COMMENTAIRES). CELA PEUT POSER DES PROBLÈMES         */
/* D'INTERPRÉRATION DE FIN DE LIGNE AVEC IE.                     */
/*---------------------------------------------------------------*/

/*Global variables */
var inreplace = false;
var ie = ((navigator.userAgent.toUpperCase().indexOf('MSIE') > -1) ? true : false);
var firefox = (((navigator.userAgent.toUpperCase().indexOf('FIREFOX') > -1) || (navigator.userAgent.toUpperCase().indexOf('MACINTOSH') > -1)) ? true : false);
var safari = ((navigator.userAgent.toUpperCase().indexOf('SAFARI') > -1) ? true : false);

function YIN_escape(valeur) {

    valeur = valeur.replace(/\%/g, "%25");
    valeur = valeur.replace(/\+/g, "%2B");
    valeur = valeur.replace(/\'/g, "%27");
    valeur = valeur.replace(/\#/g, "%23");
    return valeur.replace(/\&/g, "%26");
}

function CacheCalendrier1(myform, mychamp) {
    if (document.getElementById('Couche_Calendrier1')) {
        if (document.getElementById('Couche_FermeCalendrier1').style.display != "none") {
            document.getElementById('CacheCalendrierClient1').value = mychamp;
            eval('document.' + myform + '.submit();');
        }
    }
}


function CacheCalendrier2(myform, mychamp) {
    if (document.getElementById('Couche_Calendrier2')) {
        if (document.getElementById('Couche_FermeCalendrier2').style.display != "none") {
            document.getElementById('CacheCalendrierClient2').value = mychamp;
            eval('document.' + myform + '.submit();');
        }
    }
}

// fonction qui teste la date en passant l'objet
function valDate(oDate) {
    lok = true
    if (oDate.value.length > 0) {
        if (oDate.value.length < 8)
            lok = false
        else {
            jour = parseInt(oDate.value.substring(0, 2), 10)
            bar1 = oDate.value.substring(2, 3)
            mois = parseInt(oDate.value.substring(3, 5), 10)
            bar2 = oDate.value.substring(5, 6)
            an = parseInt(oDate.value.substring(6), 10)
            if ((bar1 != "/") || (bar2 != "/"))
                lok = false
            else
                if ((an > 99) && (an < 1900))
                lok = false
            else
                if ((mois > 12) || (mois == 0))
                lok = false
            else
                if ((jour > 31) || (jour == 0))
                lok = false
            else
                if (((mois == 4) || (mois == 6) || (mois == 9) || (mois == 11)) && (jour > 30))
                lok = false
            else
                if (mois == 2) {
                bi = (an % 4)
                if (bi == 0)
                    jmax = 29
                else
                    jmax = 28
                if (jour > jmax) {
                    lok = false
                }
            }
        }
    }
    return lok
}

function changeZoneDate(dateDepart, dateArrivee) {
    if (dateDepart.length == 2) dateArrivee.focus()
}

function valDateStr(Date) {
    if (Date == "//") Date = "";

    lok = true
    if (Date.length > 0) {
        if (Date.length < 8)
            lok = false
        else {
            jour = parseInt(Date.substring(0, 2), 10)
            bar1 = Date.substring(2, 3)
            mois = parseInt(Date.substring(3, 5), 10)
            bar2 = Date.substring(5, 6)
            an = parseInt(Date.substring(6), 10)
            if ((bar1 != "/") || (bar2 != "/"))
                lok = false
            else
                if ((an >= 0) && (an < 1900))
                lok = false
            else
                if ((mois > 12) || (mois == 0))
                lok = false
            else
                if ((jour > 31) || (jour == 0))
                lok = false
            else
                if (((mois == 4) || (mois == 6) || (mois == 9) || (mois == 11)) && (jour > 30))
                lok = false
            else
                if (mois == 2) {
                bi = (an % 4)
                if (bi == 0)
                    jmax = 29
                else
                    jmax = 28
                if (jour > jmax) {
                    lok = false
                }
            }
        }
    }
    return lok
}

function valHeure(oHeure) {
    lok = true
    if (oHeure.value.length > 0) {
        if (oHeure.value.length < 5)
            lok = false
        else {
            heure = oHeure.value.substring(0, 2)
            dpoints = oHeure.value.substring(2, 3)
            minute = oHeure.value.substring(3, 5)

            if (dpoints != ":")
                lok = false
            else
                if (heure > 23)
                lok = false
            else
                if (minute > 59)
                lok = false
        }
    }
    return lok
}

function TestDate(evt) {
    var keyCode = (evt.which ? evt.which : (evt.keyCode ? evt.keyCode : 0))
    if (!(((keyCode > 47) && (keyCode <= 58))
	|| (keyCode == 8) || (keyCode == 9) || ((keyCode >= 37) && (keyCode <= 40) && (evt.target && evt.charCode == 0))))
        StopEvent(evt);
}

function FocusDate(evt) {
    var keyCode = (evt.which ? evt.which : (evt.keyCode ? evt.keyCode : 0))
    if (window.event) obj = window.event.srcElement;
    else obj = evt.target;
    index = -1;
    for (var i = 0, j = obj.form.elements.length; i < j; i++) {
        if (obj.form.elements[i].name == obj.name) { index = i; }
    }
    if ((obj.value.length == (obj.maxLength)) && (index > -1)) {
        if ((keyCode != 9) && (keyCode != 16) && ((index + 1) <= obj.form.elements.length)) {
            obj.form.elements[index + 1].focus();
            if (obj.form.elements[index + 1].tagName.toUpperCase() != "SELECT")
                obj.form.elements[index + 1].select();
        }
    }
}
function SiecleDate(evt) {
    var keyCode = (evt.which ? evt.which : (evt.keyCode ? evt.keyCode : 0))
    if (window.event) obj = window.event.srcElement;
    else obj = evt.target;
    index = -1;
    for (var i = 0, j = obj.form.elements.length; i < j; i++) {
        if (obj.form.elements[i].name == obj.name) { index = i; }
    }
    if ((keyCode == 9) && ((index - 1) >= 0))
        if ((obj.form.elements[index - 1].maxLength == 4) && (obj.form.elements[index - 1].length == 2))
        obj.form.elements[index - 1].value = "20" + obj.form.elements[index - 1].value;
}
function Num(evt) {
    var keyCode = (evt.which ? evt.which : (evt.keyCode ? evt.keyCode : 0))
    if (evt.which == 0) return;
    if (evt.ctrlKey || evt.keyCode == 17) return;
    if (!(((keyCode > 47) && (keyCode < 58))
		|| (keyCode == 46) || (keyCode == 8) || (keyCode == 9) || ((keyCode >= 37) && (keyCode <= 40) && (evt.target && evt.charCode == 0))))
        StopEvent(evt);
}
function Num2(evt) {
    var keyCode = (evt.which ? evt.which : (evt.keyCode ? evt.keyCode : 0))
    if (evt.which == 0) return;
    if (evt.ctrlKey || evt.keyCode == 17) return;
    if (!(((keyCode > 47) && (keyCode < 58))
        || (keyCode == 8) || (keyCode == 9) || ((keyCode >= 37) && (keyCode <= 40) && (evt.target && evt.charCode == 0))))
        StopEvent(evt);
}
function NumDec(evt) {
    var keyCode = (evt.which ? evt.which : (evt.keyCode ? evt.keyCode : 0))
    if (evt.which == 0) return;
    if (evt.ctrlKey || evt.keyCode == 17) return;
    if ((!((keyCode > 47) && (keyCode < 58))) && (keyCode != 44) && (keyCode != 46) && (keyCode != 8) && (keyCode != 9) && (!((keyCode >= 37) && (keyCode <= 40) && (evt.target && evt.charCode == 0)))) StopEvent(evt);

    if (keyCode == 46) {
        if (window.event) evt.keyCode = 44;
        if (evt.which) ReplaceKey(evt, 46, 44);
    }
}
function NumDecNegatif(evt) {
    var keyCode = (evt.which ? evt.which : (evt.keyCode ? evt.keyCode : 0))
    if (evt.which == 0) return;
    if (evt.ctrlKey || evt.keyCode == 17) return;
    if ((!((keyCode > 47) && (keyCode < 58))) && (keyCode != 44) && (keyCode != 45) && (keyCode != 46) && (keyCode != 8) && (keyCode != 9) && (!((keyCode >= 37) && (keyCode <= 40) && (evt.target && evt.charCode == 0)))) StopEvent(evt);

    if (keyCode == 46) {
        if (window.event) evt.keyCode = 44;
        if (evt.which) ReplaceKey(evt, 46, 44);
    }
}
function PasGuillemet(evt) {
    var keyCode = (evt.which ? evt.which : (evt.keyCode ? evt.keyCode : 0))
    if (keyCode == 39) StopEvent(evt);
}
function AlphaNum(evt) {
    var keyCode = (evt.which ? evt.which : (evt.keyCode ? evt.keyCode : 0))

    if ((!((keyCode > 47) && (keyCode < 58))) && (!((keyCode > 64) && (keyCode < 91))) && (!((keyCode > 96) && (keyCode < 123))) && (keyCode != 45) && (keyCode != 46) && (keyCode != 8) && (keyCode != 37) && (keyCode != 35) && (keyCode != 39) && (keyCode != 9) && (keyCode != 36)) {
        StopEvent(evt);
    }
}
function format_zero(nb) {
    //nb = Math.round(nb*100)/100;
    if (nb == '') nb = '0';
    if (nb.indexOf(",") > 0) {
        var cEntier = nb.substring(0, nb.indexOf(","))
        var cDecimal = nb.substring(nb.indexOf(",") + 1, nb.length)
        if (cDecimal.length == 1)
            cDecimal = cDecimal + "0"
        return (cEntier + "," + cDecimal)
    } else {
        return nb + ",00"
    }
}

function Majuscule(evt) {
    var keyCode = (evt.which ? evt.which : (evt.keyCode ? evt.keyCode : 0));
    if (evt.ctrlKey || evt.keyCode == 17) { return; }
    cChar = String.fromCharCode(keyCode);
    if ((keyCode > 96) && (keyCode < 123)) {
        if (window.event && keyCode > 0) { window.event.keyCode = cChar.toUpperCase().charCodeAt(0); }
        if (evt.target && evt.charCode > 0) {
            if ((evt.target.value.length + 1) > evt.target.maxLength) { return; }
            evt.target.value = evt.target.value + cChar.toUpperCase();
            evt.preventDefault();
        };
    }
}

function Compare_Date(date_entree, date_sortie) {
    jour_date_entree = ""
    mois_date_entree = ""
    annee_date_entree = ""
    jour_date_sortie = ""
    mois_date_sortie = ""
    annee_date_sortie = ""
    if (date_entree == "//") date_entree = "";
    if (date_sortie == "//") date_sortie = "";
    if ((date_entree == "") || (date_sortie == "")) return true;
    longueur_date_entree = date_entree.length
    longueur_date_sortie = date_sortie.length

    compteur = 0;
    while (compteur != 2) {
        jour_date_entree = jour_date_entree + date_entree.charAt(compteur)
        compteur++;
    }
    compteur++;

    while (compteur != 5) {
        mois_date_entree = mois_date_entree + date_entree.charAt(compteur)
        compteur++;
    }
    compteur++;

    while (compteur != 10) {
        annee_date_entree = annee_date_entree + date_entree.charAt(compteur)
        compteur++;
    }

    compteur = 0;
    while (compteur != 2) {
        jour_date_sortie = jour_date_sortie + date_sortie.charAt(compteur)
        compteur++;
    }
    compteur++;

    while (compteur != 5) {
        mois_date_sortie = mois_date_sortie + date_sortie.charAt(compteur)
        compteur++;
    }
    compteur++;

    while (compteur != 10) {
        annee_date_sortie = annee_date_sortie + date_sortie.charAt(compteur)
        compteur++;
    }

    //concatenation des nouvelles dates aaaa/mm/jj
    date_entree = annee_date_entree + mois_date_entree + jour_date_entree
    date_sortie = annee_date_sortie + mois_date_sortie + jour_date_sortie
    if (date_sortie - date_entree < 0) { return false }
    else { return true }
}

function NumFloat(evt) {
    var keyCode = (evt.which ? evt.which : (evt.keyCode ? evt.keyCode : 0))
    if (evt.which == 0) return;
    if (evt.ctrlKey || evt.keyCode == 17) return;
    if (window.event) obj = window.event.srcElement; else obj = evt.target;
    if (obj.value != '' && keyCode == 45) StopEvent(evt);
    if ((obj.value.indexOf('.') > -1 || obj.value.indexOf(',') > -1 || obj.value == '-') && (keyCode == 44 || keyCode == 46)) { StopEvent(evt) };
    if ((!((keyCode > 47) && (keyCode < 58))) && (keyCode != 44) && (keyCode != 46) && (keyCode != 7) && (keyCode != 8) && (keyCode != 9) && (!((keyCode >= 37) && (keyCode <= 40) && (evt.target && evt.charCode == 0))) && (keyCode != 45)) StopEvent(evt);
    if (keyCode == 46) {
        if (window.event) { evt.keyCode = 44; }
        if (evt.which) { ReplaceKey(evt, 46, 44); }
    }
}

function valEmail(email) {
    if (window.RegExp) {
        var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
        var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";
        var reg1 = new RegExp(reg1str);
        var reg2 = new RegExp(reg2str);
        if (!reg1.test(email) && reg2.test(email)) {
            return true;
        }
        return false;
    }
    else {
        if (email.indexOf("@") >= 0) {
            return true;
        }
        return false;
    }
}
if (firefox) {
    HTMLBodyElement.prototype.focus = function() {
        self.focus();
    }
}
function StopEvent(evt) {
    if (evt && evt.preventDefault) {
        evt.preventDefault();
        if (evt.stopPropagation) evt.stopPropagation();
    }
    else if (window.event) {
        window.event.cancelBubble = true;
        window.event.returnValue = false;
    }
}
/* DO NOT REMOVE VARIABLE (infinite loop will appear)*/
// Ne marche plus avec FireFox à partir de 1.0.5 car le événements générés ont été bloqué par des raisons de securite 

function ReplaceKeyOld(evt, KeySearch, KeyReplace) {
    if (document.createEvent && !inreplace && evt.charCode > 0 && evt.charCode == KeySearch) {
        inreplace = true;
        var newEvent = document.createEvent("KeyEvents");
        newEvent.initKeyEvent("keypress", true, true, document.defaultView,
							evt.ctrlKey, evt.altKey, evt.shiftKey,
							evt.metaKey, 0, KeyReplace);
        StopEvent(evt);
        evt.target.dispatchEvent(newEvent);
        inreplace = false;
    }
}

function ReplaceKey(evt, KeySearch, KeyReplace) {
    // Pour des raisons de securité, on ne peut pas changer la touche que l'utilisateur a appuié ! FireFox le bloc !!!
}

/* If onlyUcase is false do not change the event */
function Lib_majuscule(onlyUcase, evt) {

    if ((!onlyUcase) || (onlyUcase.toString().toLowerCase() == "false") || (onlyUcase.toString() == "0")) { return; }
    var keyCode = (evt.which ? evt.which : (evt.keyCode ? evt.keyCode : 0))
    cChar = String.fromCharCode(keyCode);

    if (window.event && keyCode > 0) window.event.keyCode = majusculeChar(cChar).charCodeAt(0);
    //if(evt.target&&evt.charCode>0) ReplaceKey(evt,keyCode,majusculeChar(cChar).charCodeAt(0));
    if (evt.target && evt.charCode > 0) {
        evt.target.value = evt.target.value + majusculeChar(cChar);
        evt.preventDefault();
    };
}

function getInnerText(control) {
    if (typeof (control.textContent) != "undefined") {
        return control.textContent;
    }
    else {
        return control.innerText;
    }
}

function FormatNumerique(TextBox, NbrDecimales) {
    TextBox.value = TextBox.value.replace(' ', '');
    var tmp = TextBox.value;

    if (tmp.indexOf('.', 0) != -1) {
        tmp = tmp.replace('.', ',');
    }

    if (tmp == '') {
        if (NbrDecimales == 0) {
            tmp = '0';
        }
        else {
            tmp = '0,';
            for (var i = 0; NbrDecimales > i; i++) {
                tmp = tmp + '0';
            }
        }
    }
    else if (tmp.indexOf(',', 0) != -1) {
        var cGauche = tmp.substring(0, tmp.indexOf(',', 1));
        var cDroite = tmp.substring(tmp.indexOf(',', 1) + 1, tmp.length);

        if (cGauche == '') {
            cGauche = '0';
            var cDroite = tmp.substring(tmp.indexOf(',', 0) + 1, tmp.length);
        }
        else {
            var cDroite = tmp.substring(tmp.indexOf(',', 1) + 1, tmp.length);
        }

        if (cDroite.length == NbrDecimales) {
            if (cGauche == '0') {
                //Dans le cas ou tapé par exemple : ,256
                tmp = cGauche + ',' + cDroite.substring(0, NbrDecimales);
            }
        }
        else if (cDroite.length > NbrDecimales) {
            if (NbrDecimales == 0) {
                tmp = cGauche;
            }
            else {
                tmp = cGauche + ',' + cDroite.substring(0, NbrDecimales);
            }
        }
        else {
            for (var i = 0; cDroite.length < NbrDecimales; i++) {
                cDroite = cDroite + '0';
            }
            tmp = cGauche + ',' + cDroite.substring(0, NbrDecimales);
        }
    }
    else {
        if (NbrDecimales != 0) {
            tmp = tmp + ',';
            for (var i = 0; NbrDecimales > i; i++) {
                tmp = tmp + '0';
            }
        }
    }

    TextBox.value = tmp;
}

function FormatNumeriqueString(Valeur, NbrDecimales) {
    var tmp = Valeur.toString().replace(' ', '');

    if (tmp.indexOf('.', 0) != -1) {
        tmp = tmp.replace('.', ',');
    }

    if (tmp == '') {
        if (NbrDecimales == 0) {
            tmp = '0';
        }
        else {
            tmp = '0,';
            for (var i = 0; NbrDecimales > i; i++) {
                tmp = tmp + '0';
            }
        }
    }
    else if (tmp.indexOf(',', 0) != -1) {
        var cGauche = tmp.substring(0, tmp.indexOf(',', 1));
        var cDroite = tmp.substring(tmp.indexOf(',', 1) + 1, tmp.length);

        if (cGauche == '') {
            cGauche = '0';
            var cDroite = tmp.substring(tmp.indexOf(',', 0) + 1, tmp.length);
        }
        else {
            var cDroite = tmp.substring(tmp.indexOf(',', 1) + 1, tmp.length);
        }

        if (cDroite.length == NbrDecimales) {
            if (cGauche == '0') {
                //Dans le cas ou tapé par exemple : ,256
                tmp = cGauche + ',' + cDroite.substring(0, NbrDecimales);
            }
        }
        else if (cDroite.length > NbrDecimales) {
            if (NbrDecimales == 0) {
                tmp = cGauche;
            }
            else {
                tmp = cGauche + ',' + cDroite.substring(0, NbrDecimales);
            }
        }
        else {
            for (var i = 0; cDroite.length < NbrDecimales; i++) {
                cDroite = cDroite + '0';
            }
            tmp = cGauche + ',' + cDroite.substring(0, NbrDecimales);
        }
    }
    else {
        if (NbrDecimales != 0) {
            tmp = tmp + ',';
            for (var i = 0; NbrDecimales > i; i++) {
                tmp = tmp + '0';
            }
        }
    }

    return tmp;
}

function FormatNumeriqueSiRempli(TextBox, NbrDecimales) {
    TextBox.value = TextBox.value.replace(' ', '');
    var tmp = TextBox.value;
    if (tmp != "") {

        if (tmp.indexOf('.', 0) != -1) {
            tmp = tmp.replace('.', ',');
        }

        if (tmp == '') {
            if (NbrDecimales == 0) {
                tmp = '0';
            }
            else {
                tmp = '0,';
                for (var i = 0; NbrDecimales > i; i++) {
                    tmp = tmp + '0';
                }
            }
        }
        else if (tmp.indexOf(',', 0) != -1) {
            var cGauche = tmp.substring(0, tmp.indexOf(',', 1));
            var cDroite = tmp.substring(tmp.indexOf(',', 1) + 1, tmp.length);

            if (cGauche == '') {
                cGauche = '0';
                var cDroite = tmp.substring(tmp.indexOf(',', 0) + 1, tmp.length);
            }
            else {
                var cDroite = tmp.substring(tmp.indexOf(',', 1) + 1, tmp.length);
            }

            if (cDroite.length == NbrDecimales) {
                if (cGauche == '0') {
                    //Dans le cas ou tapé par exemple : ,256
                    tmp = cGauche + ',' + cDroite.substring(0, NbrDecimales);
                }
            }
            else if (cDroite.length > NbrDecimales) {
                if (NbrDecimales == 0) {
                    tmp = cGauche;
                }
                else {
                    tmp = cGauche + ',' + cDroite.substring(0, NbrDecimales);
                }
            }
            else {
                for (var i = 0; cDroite.length < NbrDecimales; i++) {
                    cDroite = cDroite + '0';
                }
                tmp = cGauche + ',' + cDroite.substring(0, NbrDecimales);
            }
        }
        else {
            if (NbrDecimales != 0) {
                tmp = tmp + ',';
                for (var i = 0; NbrDecimales > i; i++) {
                    tmp = tmp + '0';
                }
            }
        }
    }
    TextBox.value = tmp;
}

function FormatNumerique_Milliers(x) {
    if (x == 0) { return x; }
    else {
        var str = x.toString(), n = str.length;

        if (n < 4) { return x; }
        else {
            return ((n % 3) ? str.substr(0, n % 3) + ' ' : '') + str.substr(n % 3).match(new RegExp('[0-9]{3}', 'g')).join(' ');
        }
    }
}

// 22/07/09 : DCM 19 - Ajout de bouton Nouveau et donc fonction pour un reload sur les select
function ReloadSelect(ChampsCible, ChampsReload) {
    var z = window.opener.document.getElementById(ChampsCible);
    var zr = window.opener.document.getElementById(ChampsReload);
    if (z.tagName.toUpperCase() == 'SELECT' && zr != null) {
        zr.value = '1';
        window.opener.document.forms[0].submit();
        window.opener.focus();
    }
}

// 02/09/09 : Validation des comptes comptables
// Fonction utilisées par la classe PA_CompteComptabilite, sont utilisées aussi Majuscule et num2
function CompteCombleAvecZero(Champ, ParamLongueurMax) {
    if (Champ.value != '') {
        for (i = Champ.value.length; i < ParamLongueurMax; i++) {
            Champ.value += '0';
        }
    }

}

// 03/12/09 : Fonction pour interdire saisie de caractères indésirables (event onkeypress)
function verifierChar(cChaine, cCaracInterdits) {
    var keyCode = (cChaine.which ? cChaine.which : (cChaine.keyCode ? cChaine.keyCode : 0));
    var cChar = String.fromCharCode(keyCode);
    var cAccents = cCaracInterdits;
    var nPosic = cAccents.indexOf(cChar);
    if (nPosic > -1 || cChar == "\\") {
        return false;
    }
    else return true;
}

// 03/12/09 : Fonction pour convertir des caractères pour majuscule et en substituant des caractères non permis par autres autorisés (event onblur)
function convertirChar(oChamp, cCaracInterdits, cCaracSubstituts) {
    var cAccents = cCaracInterdits;
    var cSansAccents = cCaracSubstituts;
    var nPosic, cCarac, cChar;
    var cTempChar = "";
    cChar = oChamp.value.replace(/\\/g, "");
    for (var i = 0; i < cChar.length; i++) {
        cCarac = cChar.charAt(i);
        nPosic = cAccents.indexOf(cCarac);
        if (nPosic > -1)
            cTempChar += cSansAccents.charAt(nPosic);
        else
            cTempChar += cChar.charAt(i);
    }
    oChamp.value = cTempChar.toUpperCase();
}

function replaceAll(string, token, newtoken) {
    while (string.indexOf(token) != -1) {
        string = string.replace(token, newtoken);
    }
    return string;
}

//24/03/2010 : Fonction utilisée par les fonctions CalcCleRIB et VerificationRIB
function ConvertirCompteRIB(MonCompte) {
    var tab = "abcdefghijklmnopqrstuvwxyz0123456789";
    var tab1 = "123456789123456789234567890123456789".split("");

    //On fait un lowercase parce qu'avec IE la fonction Majuscule fonctionne et pas avec firefox
    //donc on compare MonCompte avec le tableau tab en minuscule et ça fonction avec IE + Firefox
    MonCompte = MonCompte.toLowerCase();
    /*On remplace toutes les lettres par des chiffres suivant un tableau de valeur :
    ABCDEFGHI
    JKLMNOPQR
    STUVWXYZ
    123456789*/
    while (MonCompte.match(/\D/) != null) {
        MonCompte = MonCompte.replace(/\D/, tab1[tab.indexOf(MonCompte.match(/\D/))]);
        /* /!\ Problème sur Firefox la fonction Majuscule sur le onKeypress fonctionne pas.
        Par mesure de sécurité et pour éviter des éventuelles boucles infini on fait 
        un break si Moncompte est undefined sur firefox
        if (MonCompte.match(reg1)){break};	*/
    }
    return (MonCompte != '' ? parseInt(MonCompte, 10) : '');
}

//24/03/2009 : Fonction pour le calcul du RIB
function CalcCleRIB(MonCompte, MaBanque, MonGuichet) {
    var ResultatFinale;

    MonCompte = ConvertirCompteRIB(MonCompte);

    if ((MonCompte != '') && isNaN(MaBanque) == false) {
        ResultatFinale = MaBanque % 97;
        ResultatFinale = ResultatFinale * 100000 + parseInt(MonGuichet, 10);
        ResultatFinale = ResultatFinale % 97;
        ResultatFinale = ResultatFinale * Math.pow(10, 11) + MonCompte;
        ResultatFinale = ResultatFinale % 97;
        ResultatFinale = ResultatFinale * 100;
        ResultatFinale = ResultatFinale % 97;
        ResultatFinale = 97 - ResultatFinale;
        if ((MonGuichet != '') && (MaBanque != '')) {
            return (ResultatFinale.toString().length == 1 ? "0" + ResultatFinale : ResultatFinale);
        }
        else return '';
    }
    else return '';
}

//24/03/2009 : Fonction pour le calcul du bloc de coordonnées bancaires
function VerificationRIB(MonCompte, MaBanque, MonGuichet, MaCle) {
    var ResultatFinale;

    MonCompte = ConvertirCompteRIB(MonCompte);

    if ((MonCompte != '') && isNaN(MaBanque) == false) {
        ResultatFinale = MaBanque % 97;
        ResultatFinale = ResultatFinale * 100000 + parseInt(MonGuichet, 10);
        ResultatFinale = ResultatFinale % 97;
        ResultatFinale = ResultatFinale * Math.pow(10, 11) + MonCompte;
        ResultatFinale = ResultatFinale % 97;
        ResultatFinale = ResultatFinale + "";
        ResultatFinale = ResultatFinale + MaCle;
        ResultatFinale = parseFloat(ResultatFinale) % 97;
        return (ResultatFinale == 0);
    }
    else return false;
}


//09/12/2009 : Fonction utilisée par les fonctions CalcIBAN et VerificationIBAN
function NombreIBAN(cIBAN) {
    //Déplacer les 4 premiers caractères à droite
    if (cIBAN.length > 4) cIBAN = cIBAN.substr(4, cIBAN.length - 4) + cIBAN.substr(0, 4);
    else return "0";

    //Convertir les lettres en chiffres via une table de conversion (A=10, B=11, C=12 etc.)
    var cConversion = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var ctemp = "";

    for (i = 0; i <= cIBAN.length - 1; i++) {
        ctemp += ((cConversion.indexOf(cIBAN.charAt(i)) > -1) ? cConversion.indexOf(cIBAN.charAt(i)).toString() : "");
    }

    return ctemp;
}

//09/12/2009 : Fonction pour le calcul du bloc de coordonnées bancaires
function CalcIBAN(acodepays, aRIB) {
    var lConcat, lNb, lIBAN, lCodeNum, lCodeStr, li, lRetenue, lCle, lNbInterm, lStrInterm;

    lConcat = NombreIBAN(acodepays + "00" + aRIB);

    // découpage par bloc de 9 chiffres pour calculer le modulo (pb de précision)

    li = 0;

    lRetenue = "";

    while (li < eval(lConcat.length)) {
        lStrInterm = lRetenue + lConcat.substring(li, li + 9);

        lNbInterm = parseFloat(lStrInterm);

        lCle = lStrInterm % 97;

        lRetenue = "" + lCle;

        li = li + 9;
    }

    lCodeNum = 98 - (lCle % 97);

    if (lCodeNum < 10) {
        lCodeStr = "0" + lCodeNum;
    }
    else {
        lCodeStr = "" + lCodeNum;
    }

    lIBAN = acodepays + lCodeStr + aRIB;

    return lIBAN;
}

//09/12/2009 : Fonction pour le calcul du bloc de coordonnées bancaires
function VerificationIBAN(cIBAN) {
    var lConcat = NombreIBAN(cIBAN);

    /*
    Diviser le nombre ainsi obtenu par 97. Si le reste est égal à 1 l'IBAN est correct : [[Modulo]] de 97 égal à 1
    Si l'IBAN est trop long pour effectuer le calcul en une seule fois, le calcul pourra être scindé en calculs successifs de restes, 
    effectués sur des nombres entiers d'une longueur compatible avec le matériel utilisé (à titre d'exemple, un nombre entier signé 
    comportant 32 bits représente un maximum de 9 chiffres).
    */
    var li = 0;

    var lRetenue = "";

    while (li < eval(lConcat.length)) {
        lStrInterm = lRetenue + lConcat.substring(li, li + 9);

        lNbInterm = parseFloat(lStrInterm);

        lCle = lStrInterm % 97;

        lRetenue = "" + lCle;

        li = li + 9;
    }

    if (lCle == 1) return true;
    else return false;
}
//Utilisés dans les fonctions de vérification du Code
function funcCaracteresInterdits() {
    /*
    áàãâÁÀÃÂéèêÉÈÊíìîÍÌÎóõôòÓÔÕÒúùüÚÙÜçÇ
    */
    return '\xE1\xE0\xE3\xE2\xC1\xC0\xC3\xC2\xE9\xE8\xEA\xC9\xC8\xCA\xED\xEC\xEE\xCD\xCC\xCE\xF3\xF5\xF4\xF2\xD3\xD4\xD5\xD2\xFA\xF9\xFC\xDA\xD9\xDC\xE7\xC7';
}

function funcCaracteresSubstituts() {
    return 'AAAAAAAAEEEEEEIIIIIIOOOOOOOOUUUUUUCC';
}

function funcCaracteresInterditsIBAN() {
    /*
     -_\'^~`´.,;:?<>%$#@!¨&*()=+}{[]"|\\/
    */
    return funcCaracteresInterdits() + '\x20\x2D\x5F\x5C\x27\x5E\x7E\x60\xC2\xB4\x2E\x2C\x3B\x3A\x3F\x3C\x3E\x25\x24\x23\x40\x21\xC2\xA8\x26\x2A\x28\x29\x3D\x2B\x7D\x7B\x5B\x5D\x22\x7C\x5C\x2F';
}

function funcCaracteresInterditsRubriquesCotisationsVariables() {
    /*
     -_\'^~`´.,;:?<>%$#@!¨&*()=+}{[]"|\\/
    */
    return funcCaracteresInterdits() + '\x20\x2D\x5C\x27\x5E\x7E\x60\xC2\xB4\x2E\x2C\x3B\x3A\x3F\x3C\x3E\x25\x24\x23\x40\x21\xC2\xA8\x26\x2A\x28\x29\x3D\x2B\x7D\x7B\x5B\x5D\x22\x7C\x5C\x2F';
}


// Arrondi personnalisé avec un nombre de décimales après la virgule
function Idylis_MathRound(nNum, nDec) {
    return parseFloat(parseFloat(nNum).toFixed(nDec));
}

var Idylis_Util = {

    requireJS: function(js) {
        if (eval('typeof ' + js) == 'undefined') {
            alert("JS manquant : '" + js + "'");
        }
    }

};

//il retourne la valeur "top" en cours de l'élément HTML passé par le paramètre
function getOffsetTop(obj) {
    offsetTop = obj.offsetTop;
    var parentEl = obj.offsetParent;

    while (parentEl != null) {
        offsetTop = offsetTop + parentEl.offsetTop;
        parentEl = parentEl.offsetParent;
    }

    return (offsetTop);
}

//il retourne la valeur "left" en cours de l'element HTML passe par le parametre
function getOffsetLeft(obj) {
    offsetLeft = obj.offsetLeft;
    var parentEl = obj.offsetParent;

    while (parentEl != null) {
        offsetLeft = offsetLeft + parentEl.offsetLeft;
        parentEl = parentEl.offsetParent;
    }

    return (offsetLeft);
}

//Validation du nombre de caractères maximum défini pour la largeur de un element HTML textarea. (events: onKeyUp)
function nbrCaracterMaximum(obj, largeur, message) {
    var text;
    if (!ie) 
        text = obj.value.replace(/\n/g, "\r\n");
    else
        text = obj.value;

    if (text.length > largeur) {
        obj.value = text.substring(0, largeur);
        if (message != undefined) {
            alert(message);
        }
    }
}
