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)
{  
	//return ((s == null) || (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)
{
	var i;
	if (isEmpty(s)) return true;
	for (i = 0; i < s.length; i++)
	{   
		var c = s.charAt(i);
		if (c < '0' || c > '9') return false;
	}
	return true;
}


function isDecimale(s)
{
	var i;
	var gia_trovato = false;
	if (isEmpty(s)) return true;
	for (i = 0; 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 isDate(s)
{
	var i, j, giorno, mese, anno;
	s = Trim(s);
	if (isWhitespace(s)) return false;
	for (i = 0; i < s.length; i++)
	{   
		var c = s.charAt(i);
		if (c != '/' && (c < '0' || c > '9')) return false;
	}
	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 false;
	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 false
	 
	 
	// 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 false;
			
	//alert("Data da analizzare: <"+giorno+"-"+mese+"-"+anno+">")

	// CHECK
	if (isNaN(giorno) || isNaN(mese) ||  isNaN(anno)) return false;
	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 false;
	if (giorno < 1 || giorno > giorni[mese]) return false;
	return true;
}


function isTime(s)
{
	var i, j, ore, minuti, secondi;
	s = Trim(s);
	if (isWhitespace(s)) return false;
	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 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 = "?";
	}
}