/*
ajout des prototypes à l'objet String:

fonctions permettant de faire la pluparts des vérifications sur les saisies:

isDate		-> verifie si la chaine est bien une date
isAlpha		-> verifie si la chaine est composé de lettre
isAlphaNum	-> vérifie si la chaine est composé de lettre et/ou de nombre
isNumeric	-> vérifie si la chaine est un nombre entier positif
isNumber	-> vérifie si la chaine est un nombre entier relatif
isFloat		-> vérifie si la chaine est un nombre 
isNotEmpty	-> verifie que la chaine n'est pas vide
isNoTel		-> vérifie que la chaine soit un numero de tel
isEmail		-> vérifie que la chaine soit une adresse mail conforme 
isNoSecu	-> vérifie que la chaine soit un numéro de sécu valide à vérifier

fonctions utiles pour le travail sur un chaîne de caractères
completeDate 	-> complete une date pour etre au format JJ/MM/AAAA
replaceAll   	-> remplace toutes les occurences d'une chaine par une autre chaine
trim 		-> enleve tous les espaces de début et de fin de chaine


*/

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;
}

String.prototype.replaceAll = function(search, repl) {
    var str = this;
    while (str.indexOf(search) != -1)
       str = str.replace(search, repl);
    return str;
}

String.prototype.trim = function() {
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

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;
}

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

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

String.prototype.isNumeric = function() {
    return /^\d+$/.test(this);
}

String.prototype.isNumber = function() {
    return /^[-]?\d+$/.test(this);
}

String.prototype.isFloat = function() {
    return /^[-]?\d+[.,]?\d*$/.test(this);
}

String.prototype.isNotEmpty = function() {
    return !/^\s*$/.test(this);
}

String.prototype.isDomain = function() {
    return /^[a-zA-Z][\w\._-]{2,63}[.][A-Za-z]{2,6}$/.test(this);
}

String.prototype.isEmail = function() {
    return /^[a-zA-Z][\w\._-]*@[a-zA-Z0-9][\w\._-]{2,63}[A-Za-z]{2,6}$/.test(this);
}

String.prototype.isNoTel = function() {
    return /^(0\d{9})|(0\d[\. -]\d{2}[\. -]\d{2}[\. -]\d{2}[\. -]\d{2})$/.test(this);
}


/*
 prototype a vérifier
 cas spécifique DOMTOM et Corse
*/


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;
} 
