﻿

function VAL_CheckCap( value ) {
    var exp = /^\d{5}$/;
    if (!exp.test(value)) return false;
    return true 
}


function __VAL_AnnoBisestile( anno ) {
    if ((anno%4 == 0 && anno%100 !=0) || (anno%400 == 0)) return true 
    else return false 
}


function __VAL_CheckDays( g, m , a ) {
    if (g<0 || g>31) return false 
    var ckd;
    if (m==2) {
        if (__VAL_AnnoBisestile(a)) ckd = 29;
        else ckd = 28;
    } else {
        if ( g==4 || g==6 || g==8 || g==10) ckd=30;
        else ckd=31;
    }
    if (g > ckd) return false 
    return true
}


function __VAL_CheckDate( value ) {
    var e = false;
    var gg = 0;
    var mm = 0;
    var aa = 0;
    
    var exp = /^\d{1,2}\/\d{1,2}\/(\d{2}|\d{4})$/;
    if (exp.test(value)) {
        var p1,p2;
        p1 = value.indexOf('/');
        p2 = value.indexOf('/',p1+1);
        if (p1>0 && p2>0) {
            gg = value.slice(0,p1);
            mm = value.slice(p1+1,p2);
            aa = value.substring(p2+1);
            if (aa<100) aa += 2000;
            if (mm>=1 && mm<=12) e = __VAL_CheckDays(gg,mm,aa);
        }    
    }
    return { e: e, g: gg, m: mm, a: aa }
}


function __VAL_CheckDate4( value ) {
    var e = false;
    var gg = 0;
    var mm = 0;
    var aa = 0;
    
    var exp = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
    if (exp.test(value)) {
        var p1,p2;
        p1 = value.indexOf('/');
        p2 = value.indexOf('/',p1+1);
        if (p1>0 && p2>0) {
            gg = value.slice(0,p1);
            mm = value.slice(p1+1,p2);
            aa = value.substring(p2+1);
            if (mm>=1 && mm<=12) e = __VAL_CheckDays(gg,mm,aa);
        }    
    }
    return { e: e, g: gg, m: mm, a: aa }
}


function VAL_CheckDate( value ) {
    var ck = __VAL_CheckDate( value );
    return ck.e;
}


function VAL_CheckDate4( value ) {
    var ck = __VAL_CheckDate4( value );
    return ck.e;
}


function VAL_CheckDate2( value ) {
    var ck = __VAL_CheckDate( value );
    var dt;
    var esito = ck.e;
    if (esito) dt = new Date(ck.a, ck.m, ck.g);
    
    return { e: esito, data: dt };
}


function VAL_CheckTime( h, m ) {
    if ((h.length>0 && m.length>0) && (!isNaN(h) && !isNaN(m))) { 
        if (h >= 0 && h<=23 && m>=0 && m<=59) return true
    } 
    return false
}


function VAL_CheckDateTime( data, h, m ) {
    var ck = __VAL_CheckDate( data );
    var esito = ck.e;
    if (esito) {
        if ((h.length>0 && m.length>0) && (!isNaN(h) && !isNaN(m))) { 
            if (h < 0 || h>23 || m<0 || m>59) esito=false 
        } else esito = false;
    }
    return esito
}


function VAL_CheckDateTime2( data, h, m ) {
    var ck = __VAL_CheckDate( data );
    var dt;
    var esito = ck.e;
    if (esito) {
        if ((h.length>0 && m.length>0) && (!isNaN(h) && !isNaN(m))) { 
            if (h < 0 || h>23 || m<0 || m>59) esito=false 
        } else esito = false;
    }
    
    if (esito) dt = new Date(ck.a, ck.m, ck.g, h, m, 0);
    
    
    return { e: esito, data: dt };
}


function VAL_CheckEmail( value ) {
    var exp = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})$/;
    if (!exp.test(value)) return false;
    return true 
}


function VAL_CheckCodiceFiscale(CF) {
    var nTempNum;
    var nAppoNum;
    var i;
    var szTempCodFisc;
    var szLastChar;
    var szValued;
    var szInValued;

    szCodFisc = CF;

    if (szCodFisc.length < 16) return false
    if (szCodFisc == "") return false;
    else {
        szCodFisc = szCodFisc.toUpperCase();
        szLastChar = szCodFisc.substr(szCodFisc.length - 1, 1);
        szTempCodFisc = szCodFisc.substr(0, szCodFisc.length - 1);
        nTempNum = 0;
        i = 0;

        while (true) {
            szValued = "B1A0KKPPLLC2QQD3RRE4VVOOSSF5TTG6UUH7MMI8NNJ9WWZZYYXX";
            // I DISPARI
            szInValued = szTempCodFisc.substr(i, 1);
            nAppoNum = szValued.search(szInValued);
            nTempNum = nTempNum + (nAppoNum & 0x7FFE) / 2;
            i = i + 1;
            if (i > 15)
                break;
            szValued = "A0B1C2D3E4F5G6H7I8J9KKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ";
            // I PARI
            szInValued = szTempCodFisc.substr(i, 1);
            nAppoNum = szValued.search(szInValued);
            nTempNum = nTempNum + (nAppoNum & 0x7FFE) / 2;
            i = i + 1;
        }
        nTempNum = nTempNum % 26; //mod
        szValued = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        szValued = szValued.substr(nTempNum, 1);
        if (szValued == szLastChar) return true;
        else return false;
    }
}


function VAL_CheckCFdata(CF, data, sesso) {
    if (!VAL_CheckCodiceFiscale(CF)) return false

    var s = sesso.toUpperCase();
    if (s != 'M' && s != 'F') return false

    var d = __VAL_CheckDate4(data);
    if (!d.e) return false

    var ctrl = 'ABCDEHLMPRST';
    var orgY = CF.substring(6, 8);
    var orgM = CF.substring(8, 9).toUpperCase();
    var orgD = CF.substring(9, 11);

    var myY = d.a.substring(2, 4);
    var i = d.m * 1;
    var myM = ctrl.substring(i - 1, i);
    var myD = d.g * 1;
    if (s == 'F') myD = myD + 40;
    if (myD < 10) myD = '0' + myD;
    else myD = '' + myD;

    if (orgY != myY || orgM != myM || orgD != myD) return false 
    
    return true
}
