Months = ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno",
"Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"];

// Giorni dei mesi di anno non-bisestile
DOMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
// Giorni dei mesi di anno bisestile
lDOMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

function Calendar_get_daysofmonth(monthNo, p_year) {
/*
	Controllo se l'anno e' bisestile ..
	1. Gli anni divisibili per quattro sono normalmente bisestili, eccetto per...
	2. Gli anni che sono anche divisibili per 100 non sono bisestili, eccetto per...
	3. Gli anni che sono anche divisibili per 400 sono bisestili.
*/
	if ((p_year % 4) == 0) {
		if ((p_year % 100) == 0 && (p_year % 400) != 0)
			return DOMonth[monthNo];

		return lDOMonth[monthNo];
	} else
		return DOMonth[monthNo];
}

// **INIZIO FUNZIONI GENERICHE DI CONTROLLO **
// funzione che imposta il focus sul campo
function setFocus(field) {
	field.focus()
}

// funzione che imposta il focus sul campo selezionandone tutto il contenuto
function select(field) {
	field.focus()
	field.select()
}

// funzione che controlla se un campo e' vuoto
function isEmpty(inputStr) {
	if (inputStr == null || inputStr == "") {
		return true
	}
	return false
}

// funzione che restituisce una copia della stringa senza spazi iniziali e finali
function trim(inputStr) {
	var strCampo = inputStr
	strCampo = ltrim(strCampo)
	strCampo = rtrim(strCampo)
	return strCampo
}

// funzione che restituisce una copia della stringa senza spazi iniziali
function ltrim(inputStr) {
	var strCampo = inputStr
	while (strCampo.substring(0,1) == ' ') 
           strCampo = strCampo.substring(1, strCampo.length)
	return strCampo
/*
        versione 2
        
	var strCampo = ""
	var i
	var j 
	if (inputStr == null || inputStr == "") {
		return strCampo
	}
	for (i = 0; i < inputStr.length; i++) {
		if (inputStr.charAt(i) != " ") {
			break;
		}
	}
	for (j = i; j < inputStr.length; j++) {
		strCampo = strCampo + inputStr.charAt(j)
	}
	return strCampo
*/
}

// funzione che restituisce una copia della stringa senza spazi finali 
function rtrim(inputStr) {
	var strCampo = inputStr
        while (strCampo.substring(strCampo.length-1,strCampo.length) == ' ')
           strCampo = strCampo.substring(0, strCampo.length-1)
	return strCampo
/*
        versione 2
        
	var strCampo = ""
	var i
	var j 
	var bolUscita
	if (inputStr == null || inputStr == "") {
		return strCampo
	}
	i = inputStr.length
	bolUscita = true	
	while (bolUscita) {
	    i--
	    if (i < 0) {
	    	bolUscita = false
	    } else {
		if (inputStr.charAt(i) != " ") {
			bolUscita = false
		}
	    }
	}
        i++
	for (j = 0; j < i; j++) {
		strCampo = strCampo + inputStr.charAt(j)
	}
	return strCampo
*/
}

// funzione che controlla se il valore di input e' formato solo da cifre numeriche
function isPosInteger(inputVal) {
	inputStr = inputVal.toString()
	for (var i = 0; i < inputStr.length; i++) {
		var oneChar = inputStr.charAt(i)
		if (oneChar < "0" || oneChar > "9") {
			return false
		}
	}
	return true
}

// funzione che determina se il valore e' compreso in un intervallo
function inRange(inputStr, lo, hi) {
	var num = parseInt(inputStr, 10)
	if (num < lo || num > hi) {
		return false
	}
	return true
}

// funzione che controlla la validita' di un campo di tipo CAP
function validateCAP(field) {
	var inp = field.value
	if (isEmpty(inp)) {
		alert("Immettere il CAP.")
		select(field)
		return false
	} else {
		if (!isPosInteger(inp)) {
			alert("CAP errato: immettere solo valori numerici.")
			select(field)
			return false
		} else {
			if (inp.length < 5) {
				alert("CAP errato: immettere 5 caratteri.")
				select(field)
				return false
			}
		}
	}
	return true
}

// funzione che controlla la validita' di un campo di tipo data
function validateData(giorno, mese, anno) {
	var input = giorno.value
	if (isEmpty(input)) {
		alert("Immettere il giorno.")
		select(giorno)
		return false
	} else {
		if (!isPosInteger(input)) {
		    alert("Giorno errato: immettere solo valori numerici.")
		    select(giorno)
		    return false
		} else {
			if (!validateMese(mese)) return false
			if (!validateAnno(anno)) return false
			var top = Calendar_get_daysofmonth(mese.value-1, anno.value)
			if (!inRange(input,1,top)) {
				alert("Giorno errato: immettere un numero tra 1 e " + top + ".")
				select(giorno)
				return false
			}
		}
	}
	return true
}

function validateMese(field) {
	var input = field.value
	if (isEmpty(input)) {
		alert("Immettere il mese.")
		select(field)
		return false
	} else {
		if (!isPosInteger(input)) {
			alert("Mese errato: immettere solo valori numerici.")
			select(field)
			return false
		} else {
			if (!inRange(input,1,12)) {
				alert("Mese errato: immettere un numero tra 1 (Gennaio) e 12 (Dicembre).")
				select(field)
				return false
			}
		}
	}
	return true
}

function validateAnno(field) {
	var input = field.value
	if (isEmpty(input)) {
		alert("Immettere l'anno.")
		select(field)
		return false
	} else {
		if (!isPosInteger(input)) {
			alert("Anno errato: immettere solo valori numerici.")
			select(field)
			return false
		} else {
			if (!inRange(input,1900,2999)) {
				alert("Anno errato: immettere un numero tra 1900 e 2999.")
				select(field)
				return false
			}
		}
	}
	return true
}
function validateEmail(field){
	var input = field.value;

	if (input.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
		return true;
	else
		return false;
}

// **FINE FUNZIONI GENERICHE DI CONTROLLO **

