/*
    agstring.js
    
    Libreria di funzioni javascript
    
    Estende l'oggetto String per effettuare controlli formali
    
    Autore:    Angelo Guido
    Versione: 1.0
*/ 

/** Verifica che tre valori possano formare una data */
function agisDate(g, m, a) {
    // Verifica banale
    if ( isNaN(g) || isNaN(m) || isNaN(a) )
        return false;
        
    if ( m < 1 || m > 12 )
        return false;
    
    // Fissa un ragionevole intervallo di date
    // per l'anno a quattro cifre
    if ( a < 1000 || a > 2100 )
        return false;
        
    if ( g < 1 || g > 31 )
        return false;

    var mesi = new Array(12);   
    mesi[0] = 31; 
    mesi[1] = 28; 
    mesi[2] = 31;
    mesi[3] = 30;
    mesi[4] = 31;
    mesi[5] = 30;
    mesi[6] = 31;
    mesi[7] = 31;
    mesi[8] = 30;
    mesi[9] = 31;
    mesi[10] = 30;
    mesi[11] = 31;

    if ( ((a % 1000) == 0 || (a % 4) == 0) && (a % 100) != 0 )
        mesi[1] = 29;

    if ( g > mesi[m-1] )
        return false;
    else
        return true;
}

/** Verifica che tre valori possano formare una ora */
function agisTime(h, m, s) {
    // Verifica banale
    if ( isNaN(h) || isNaN(m) || isNaN(s) )
        return false;
        
    if ( h < 0 || h > 23 )
        return false;
        
    if ( m < 0 || m > 59 )
        return false;
        
    if ( s < 0 || s > 59 )
        return false;
    
    return true;
}

// ========================================================
// Estensioni classe String
// ========================================================

/** Funzione trim */
String.prototype.trim = function () {
    return this.replace(/\s+$|^\s+/g, '');
}

/** Funzione ltrim */
String.prototype.ltrim = function () {
    return this.replace(/^\s+/, '');
}

/** Funzione rtrim */
String.prototype.rtrim = function () {
    return this.replace(/\s+$/, '');
}

/** Verifica che una stringa sia vuota */
String.prototype.isBlank = function () {
    if ( this == null ) return true;
    
    return (this.search(/^\s*$/) != -1);
}

/** Verifica che una stringa sia numerica */
String.prototype.isNumeric = function () {
    return !isNaN(this);
}

/** Verifica che una stringa sia costituita da sole cifre */
String.prototype.isInteger = function () {
    return (this.search(/^[0-9]+$/) != -1);
}

/** Verifica che una stringa contenga una data */
String.prototype.isDate = function(strLocale, strSep) {
    // Verifica banale
    if ( this == null )
        return false;

    // Locale di default
    if ( strLocale == null )
        strLocale = 'en';
        
    // Separatore di default
    if ( strSep == null )
        strSep = '/';

    a = this.split(strSep);

    // Devno esserci tre valori
    if (a.length != 3)
        return false;

    if (strLocale == 'it')
        return agisDate(a[0], a[1], a[2]);
    else
        return agisDate(a[1], a[0], a[2]);

}

/** Verifica che una stringa contenga una ora */
String.prototype.isTime = function(strSep) {
    // Verifica banale
    if ( this == null )
        return false;
        
    // Separatore di default (it)
    if ( strSep == null )
        strSep = '.';

    a = this.split(strSep);

    // Devno esserci due valori
    if (a.length != 2)
        return false;

    return agisTime(a[0], a[1], 0);

}

/** Verifica che una stringa contenga un indirizzo email */
String.prototype.isEmail = function() {
    return (this.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1);
}

/** Verifica che sia un C.A.P. italiano */
String.prototype.isCAP = function () {
    return (this.search(/^[0-9]{5}$/) != -1);
}

