// JavaScript Document
// FONCTIONS UTILES

//Fonctions de vérification des données issues de formulaires
//- fonctionnent par extension de l'objet string, ex: <variableString>.<nomFonction>


// Complete une date pour qu'elle soit au format JJ/MM/AAAA
// 1.01.1, 1/1/01, 01-01-01, 010101, 01012001 donneront tous 01/01/2001
// dans le cas ou l'année n'est pas complétement renseignée, 
// celle-ci est déduite en fonction de l'année en cours 
// (ex: 2/12/54 -> 02/12/1954 et 2/12/4 -> 02/12/2004)





String.prototype.completeDate = function() {
    var chain = this;
    if (/^\d+$/.test(chain) && (6 == chain.length || 8 == chain.length))
        chain = chain.substring(0, 2) + "/" + chain.substring(2, 4) + "/" + chain.substring(4, chain.length);
    var reg = /^(\d{1,2})[\/\.\\-](\d{1,2})[\/\.\\-](\d{1,4})$/;
    if (reg.test(chain)) {
        chain = chain.replace(reg, "$1/$2/$3");
        var tab = chain.split("/");
        for (var i = 0; i < 2; i++)
            tab[i] = eval(tab[i]) > 9 ? tab[i] : "0" + eval(tab[i]);
        if (4 != tab[2].length) {
            var ObjetDate = new Date();
            var year = new String(ObjetDate.getFullYear());
            if (eval(tab[2]) > eval(year.substring(2,4)))
                year = eval(year.substring(0,2) - 1) + year.substring(2,4);
            tab[2] = year.substring(0, 4 - tab[2].length) + tab[2];
        }
        return  tab.join("/");
    }
    return chain;
}

// Remplace toutes les occurences d'une chaine
String.prototype.replaceAll = function(search, repl) {
    var str = this;
    while (str.indexOf(search) != -1)
       str = str.replace(search, repl);
    return str;
}

// Supprime les espaces de début et de fin de chaine
String.prototype.trim = function() {
    return this.replace(/(^\s*)|(\s*$)/g, "");
}


// VERIFICATION DE CHAINES DE CARACTERES

// Date au format JJ/MM/AAAA (à utiliser éventuellement avec completeDate())
// Vérifie si la date existe.
String.prototype.isDate = function() {
    if (/^\d{2}[\/]\d{2}[\/]\d{4}$/.test(this)) {
        var dat1 = this.split("/");
        var dat2 = new Date(dat1[2], dat1[1] - 1, dat1[0]);
        return (dat2.getDate() == dat1[0] && dat2.getMonth() == dat1[1]-1 && dat2.getFullYear() == dat1[2]);
    }
    return false;
}

// Caractères alphabétiques (accents pris en charge + espaces)
String.prototype.isAlpha = function() {
    return /^[A-Za-zÀÂÇÈÉÊËÎÔÙÛàâçèéêëîôùû\s]+$/.test(this);
}

// Caractères alphanumériques (+ accents + espaces)
String.prototype.isAlphaNum = function() {
    return /^[\wÀÂÇÈÉÊËÎÔÙÛàâçèéêëîôùû\s]+$/.test(this);
}

// Caractères numériques (= nombre positif)
String.prototype.isNumeric = function() {
    return /^\d+$/.test(this);
}

// La chaine représente un nombre (positif ou négatif)
String.prototype.isNumber = function() {
    return /^[-]?\d+$/.test(this);
}

// La chaine n'est pas constituée que de caractères d'espacement
String.prototype.isNotEmpty = function() {
    return !/^\s*$/.test(this);
}

// E-mail (vérifie juste que l'adresse est conforme puisque l'utilisateur peut toujours
// s'arranger pour donner une fausse adresse, ou une adresse temporaire...;-)
String.prototype.isEmail = function() {
    return /^[\w\._]+@[\w]{2,}[.][A-Za-z]{1,6}$/.test(this);
}

// Numéro de téléphone (formats: 0NNNNNNNNN, 0N-NN-NN-NN-NN, 
// 0N.NN.NN.NN.NN et 0N NN NN NN NN)
String.prototype.isNoTel = function() {
    return /^(0\d{9)|(0\d[ \.-]\d{2}[ \.-]\d{2}[ \.-]\d{2}[ \.-]\d{2})$/.test(this);
}

// Numéro de sécu
String.prototype.isNoSecu = function() {
    if (/^[12]\d{2}((1[0-2])|(0[1-9]))\d{10}$/.test(this)) {
        var secu = parseInt(this.substring(0, 13));
        var cle = parseInt(this.substring(13, 15));
        return cle == (97 - secu % 97);
    }
    return false;
} 
