function sottostringa(s, i, l) {
    // se l = 0 allora copia fino alla fine
    if (l == 0) 
	l = s.length - i + 1;

    var t = "";
    while (i < s.length && l--)
	t += s.charAt(i++);
    return t;
    
}

function InStr(s, c) {
    var i = 0;
    while (i < s.length && s.charAt(i) != c)
        i++;
    return (i == s.length ? 0 : i);
}


function LTrim(s)
{
    var i = 0;
    while (i < s.length && s.charAt(i) == ' ')
        i++;
    return sottostringa(s, i, 0);
}


function RTrim(s)
{
    var i = s.length-1;
    while (i >= 0 && s.charAt(i) == ' ')
        i--;
    return sottostringa(s, 0, i+1);
}



function Trim(s)
{
	return RTrim(LTrim(s));
}



function isEmpty(s)
{  
	s = Trim(s);
	return (s == "");
}


function isWhitespace(s)
{   
	var i;
	var whitespace = " \t\n\r";
	if (isEmpty(s)) return true;
	for (i = 0; i < s.length; i++)
	{   
	   var c = s.charAt(i);
	   if (whitespace.indexOf(c) == -1) return false;
	}
	return true;
}


function isIntero(s)
{
	if (isEmpty(s)) return true;
	s = Trim(s);
	var i = 0;
	var c = s.charAt(i);
	if (c < '0' || c > '9') //il primo carattere non e' un numero, puo' essere il segno
		if (c != "+" && c != "-") 
			return false;
		else
			i++;
			
	for (; i < s.length; i++)
	{   
		var c = s.charAt(i);
		if (c < '0' || c > '9') return false;
	}
	return true;
}


function isDecimale(s)
{
	return isMoney(s);
	
	// qui di seguito c'e' la vecchia versione, ora non piu' utilizzata
	var gia_trovato = false;
	if (isEmpty(s)) return true;
	s = Trim(s);
	var i = 0;
	var c = s.charAt(i);
	if (c < '0' || c > '9') //il primo carattere non e' un numero, puo' essere il segno
		if (c != "+" && c != "-") 
			return false;
		else
			i++;
	for (; i < s.length; i++)
	{   
		var c = s.charAt(i);
		if (c != '.' && (c < '0' || c > '9')) return false;
		if (c == "." && gia_trovato) return false;
		if (c == "." ) gia_trovato = true;
	}
	return true;
}

function isMoney(s)
{
	var gia_trovato = false;
	if (isEmpty(s)) return true;
	s = Trim(s);
	var i = 0;
	var c = s.charAt(i);
	if (c < '0' || c > '9') //il primo carattere non e' un numero, puo' essere il segno
		if (c != "+" && c != "-") 
			return false;
		else
			i++;
	for (; i < s.length; i++)
	{   
		var c = s.charAt(i);
		if (c != ',' && c != '.' && (c < '0' || c > '9')) return false; // i caratteri accettabili sono ".", "," e le cifre da 0 a 9
		if (c == "." && gia_trovato) return false; // il punto e' accettabile solo se non si e' gia' trovata la virgola
		if (c == "," && gia_trovato) return false; // la virgola e' accettabile solo se non se ne gia' trovata un'altra
		if (c == "," ) gia_trovato = true;
	}
	return true;
}

function CreaDate(s) {
	var i, j, giorno, mese, anno;
	if (isWhitespace(s)) return;
	s = Trim(s);
	for (i = 0; i < s.length; i++)
	{   
		var c = s.charAt(i);
		if (c != '/' && (c < '0' || c > '9')) return;
	}
	var anno_sistema = new Date();
	anno_sistema = anno_sistema.getYear();
	if (anno_sistema < 100) anno_sistema += 1900; // nel 2000 getYear restituisce 2000 e non 100

	// PARSING
	i = s.indexOf("/");
	if (i == -1) return;
	giorno = parseInt(sottostringa(s, 0, i), 10);
	j = s.indexOf("/", i+1);
	if (j == -1) {
		anno = anno_sistema
		j = s.length;
	} else
		anno = parseInt(sottostringa(s, j+1, s.length-j-1), 10);
	mese = parseInt(sottostringa(s, i+1, j-i-1), 10);

	// Controlla che non ci siano altri separatori
	j = s.indexOf("/", j+1);
	if (j != -1) return
	 
	 
	// hanno messo l'anno a due cifre vedo di interpretarlo al meglio.. (v. formato oracle "RR")
	if (anno < 100) {   
		var secolo_corrente = Math.floor(anno_sistema/100);
		var anno_sistema = (anno_sistema % 100);
		if (anno_sistema <  50 && anno >= 50) anno += (secolo_corrente-1)*100;
		else if (anno_sistema >= 50 && anno <  50) anno += (secolo_corrente+1)*100;
		else anno += secolo_corrente*100;
	}
	if (anno < 1753 || anno > 9999)  //per i vincoli di SQL-Server
	 	return;
			
	//alert("Data da analizzare: <"+giorno+"-"+mese+"-"+anno+">")

	// CHECK
	if (isNaN(giorno) || isNaN(mese) ||  isNaN(anno)) return;
	var giorni = new Array(-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	if (!(anno % 4) && (anno % 100) || !(anno % 1000)) giorni[2]++;
	if (mese < 1 || mese > 12) return;
	if (giorno < 1 || giorno > giorni[mese]) return;
	return new Date(anno, mese-1, giorno);
}

function isDate(s)
{
	return typeof(CreaDate(s)) != "undefined";
}

function isTime(s)
{
	var i, j, ore, minuti, secondi;
	if (isWhitespace(s)) return false;
	s = Trim(s);
	for (i = 0; i < s.length; i++)
	{   
		var c = s.charAt(i);
		if (c != ':' && (c < '0' || c > '9')) return false;
	}

	// PARSING
	i = s.indexOf(":");
	if (i == -1) return false;
	ore = parseInt(sottostringa(s, 0, i), 10);
	j = s.indexOf(":", i+1);
	if (j == -1) {
		secondi = 0
		j = s.length;
	} else
		secondi = parseInt(sottostringa(s, j+1, s.length-j-1), 10);
	minuti = parseInt(sottostringa(s, i+1, j-i-1), 10);

	// Controlla che non ci siano altri separatori
	j = s.indexOf(":", j+1);
	if (j != -1) return false
	 
	//alert("Ora da analizzare: <"+ore+"-"+minuti+"-"+secondi+">")

	// CHECK
	if (isNaN(ore) || isNaN(minuti) ||  isNaN(secondi)) return false;
	if (ore < 0 || ore > 23) return false;
	if (minuti < 0 || minuti > 59) return false;
	if (secondi < 0 || secondi > 59) return false;
	return true;
}


function isEmail(str) {
	var nr_chiocciole = 0;
	var nr_punti = 0;
	var ch, last_ch = "";
	for (var i = 0; i < str.length; i++) {
		ch = str.charAt(i);
		if (ch == " ")
			return false;
		else if (ch == "@") {
			if (i == 0 || i == str.length-1) // chiocciola in testa o in coda
				return false;
			if (last_ch == ".") // chiocciola successiva ad un punto 
				return false;
			if (++nr_chiocciole > 1)
				return false;
		}
		else if (ch == ".") {
			if (i == 0 || i == str.length-1)
				return false;
			if (last_ch == "@" || last_ch == ".") // punto successivo ad una chiocciola o a un punto
				return false;
			nr_punti++;
		}
		else if (!(ch == "_" || ch == "-" || ch >= "a" && ch <= "z" || ch >= "A" &&  ch <= "Z" || ch >= "0" && ch <= "9")) // carattere non ammesso
			return false;
		last_ch = ch;
	}
	if (nr_chiocciole == 0 && str.length > 0)
		return false;
	if (nr_punti == 0 && str.length > 0)
		return false;
	return true;
}


function BrowserInfo() {
	var ua = window.navigator.userAgent
 	var i, j;
	var agent, ver, minorVer;
	if ((i = ua.indexOf("MSIE ")) >= 0) {
		j = ua.indexOf (".", i);
		this.agent = "MSIE";
		this.ver = parseInt (ua.substring (i+5, j));
		this.minorVer = parseInt(ua.substring(j+1, ua.indexOf(" ", j)));
	} else if ((i = ua.indexOf("Mozilla/")) >= 0) {
		j = ua.indexOf (".", i);
		this.agent = "Netscape";
		this.ver = parseInt(ua.substring (i+8, j));
		this.minorVer = parseInt(ua.substring(j+1, ua.indexOf(" ", j)));
	} else {
		this.agent = "?";
		this.ver = "?";
		this.ver = "?";
	}
}

function isAnno(s)
{
	return isDate('01/01/' + s)
}









