var DIGITS="0123456789";
var ALPHABETICS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
var ALPHANUMERICS = ALPHABETICS + DIGITS;
var SPECIAL = "A@BCEDFGIHJKMLNOPQSRTUVXZY[\]^_a`bcedfgihjkmlnopqsrtuvxzy{|}";
var ACCENT = "\u00F2\u00F3\u00F6\u00E0\u00E1\u00E2\u00E4\u00E8\u00E9\u00EB\u00EC\u00ED\u00EF\u00F9\u00FA\u00FC\u00FF";
var MAIL = "@.-_";
var TELEPHONE = "+() ";
var SURNAME = "-' ";
var NAME = " -,'";
var UID = "._-";
var ADDR = " ,.-/'";
var QUESTIONRESPONSE = "@|!\"$&?,;.:_-()+*' ";
var WHITESPACE = " \t\n\r";

// Constants to define max and min length

var MAX_NAME_LENGTH = 30;
var MIN_NAME_LENGTH = 0;
var MAX_SN_LENGTH = 30;
var MIN_SN_LENGTH = 0;
var MAX_OTHEREMAIL_LENGTH = 60;
var MIN_OTHEREMAIL_LENGTH = 0;
var MAX_ADDR_LENGTH = 60;
var MIN_ADDR_LENGTH = 0;
var MAX_CITY_LENGTH = 60;
var MIN_CITY_LENGTH = 0;
var MAX_POSTALCODE_LENGTH = 5;
var MIN_POSTALCODE_LENGTH = 5;
var MAX_TELEPHONENUMBER_LENGTH = 30;
var MIN_TELEPHONENUMBER_LENGTH = 0;
var MAX_UID_LENGTH = 30;
var MIN_UID_LENGTH = 6;
var MAX_USERPASSWORD_LENGTH = 30;
var MIN_USERPASSWORD_LENGTH = 6;
var MAX_PASSWORDQUESTION_LENGTH = 60;
var MIN_PASSWORDQUESTION_LENGTH = 3;
var MAX_PASSWORDRESPONSE_LENGTH = 60;
var MIN_PASSWORDRESPONSE_LENGTH = 3;

/************** VARIABILI PER LA COMPOSIZIONE DEI MESSAGGI DI ERRORE **********/

var LBL_NAME="Nome";
var LBL_SN="Cognome";
var LBL_OTHEREMAIL="E-mail";
var LBL_ADDR="Indirizzo";
var LBL_CITY="Citta'/Localita'";
var LBL_ST="Provincia";
var LBL_C="Stato";
var LBL_POSTALCODE="Codice postale";
var LBL_TELEPHONENUMBER="Num. telefono";
var LBL_SEX="Sesso";
var LBL_DATEOFBIRTH="Data di nascita";
var LBL_MARITALSTATUS="Stato civile";
var LBL_QUALIFICATIONS="Titolo di studio";
var LBL_OCCUPATION="Professione";
var LBL_SECTOROFOPERATION="Settore attivita'";
var LBL_UID="Nome utente";
var LBL_USERPASSWORD="Password";
var LBL_USERPASSWORDCONFIRM="Password";
var LBL_PASSWORDQUESTION="Domanda";
var LBL_PASSWORDRESPONSE="Risposta";
var LBL_PASSWORDRESPONSECONFIRMATION="Risposta";
var LBL_PROMOTIONALINFO="Informazioni promozionali";
var LBL_IMAGE_CODE="Codice immagine";
var LBL_NICK="Nickname";
var LBL_USERNAMECONFIRM="E-mail";

var LBL_INVALIDLENGTHPREFIX="La lunghezza del campo";
var LBL_INVALIDLENGTHSUFFIX="deve essere compresa tra";
var LBL_INVALIDCHARSPREFIX="Il campo";
var LBL_INVALIDCHARSSUFFIX="contiene caratteri non validi";
var LBL_NOTMATCHINGPREFIX="Il campo";
var LBL_NOTMATCHINGSUFFIX="non coincide con la sua conferma";
var LBL_EMPTYPREFIX="Il campo";
var LBL_EMPTYSUFFIX="e' obbligatorio";
var LBL_WRONGFORMATPREFIX="Il formato del campo";
var LBL_WRONGFORMATSUFFIX="e' errato";
var LBL_USERNAMEEQUALSPASSWORD="Lo username non puo' coincidere con la password";
var LBL_USERNAMEEQUALSNEWPASSWORD="Lo username non puo' coincidere con la nuova password";
var LBL_WRONGPREFIX="Il campo";
var LBL_WRONGSUFFIX="e' sbagliato";


/*************** FUNZIONI PER VALIDAZIONE CAMPI REGISTRAZIONE *****************/

/* validazione del campo "NAME" */
function checkName(theObj, where, fromBlur){
    var theString=theObj.value;
    if (isEmpty(theString))
        return warn(theObj, LBL_NAME,LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX, where, fromBlur);
    if (!isValidLength(theString, MIN_NAME_LENGTH, MAX_NAME_LENGTH))
        return warn(theObj, LBL_NAME,LBL_INVALIDLENGTHPREFIX, LBL_INVALIDLENGTHSUFFIX + " " + MIN_NAME_LENGTH + " e " + MAX_NAME_LENGTH, where, fromBlur);
	if (!checkString(theString, ALPHABETICS+SPECIAL+NAME+ACCENT))
        return warn(theObj, LBL_NAME,LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX, where, fromBlur);
	hideError(where);
    return true;
}

// validazione del campo "SURNAME"
function checkSurname(theObj, where, fromBlur){
	var theString=theObj.value;
	if (isEmpty(theString))
        return warn(theObj, LBL_SN, LBL_EMPTYPREFIX,LBL_EMPTYSUFFIX, where, fromBlur);
	if (!isValidLength(theString, MIN_SN_LENGTH,MAX_SN_LENGTH))
        return warn(theObj, LBL_SN, LBL_INVALIDLENGTHPREFIX,LBL_INVALIDLENGTHSUFFIX + " " + MIN_SN_LENGTH + " e " + MAX_SN_LENGTH, where, fromBlur);
	if (!checkString(theString, ALPHABETICS+SPECIAL+SURNAME+ACCENT))
        return warn(theObj, LBL_SN, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX, where, fromBlur);
	hideError(where);
	return true;
}

// validazione data di nasciata
function checkDateOfBirth(dayObj, monthObj, yearObj, where, fromBlur){
	return checkDate(dayObj, monthObj, yearObj, where, fromBlur);
}

// validazione campo sesso
function checkSex (theObj, where, fromBlur){
	var theString = theObj.value;
	if ((theObj[0].checked) || (theObj[1].checked)){
		hideError(where);
		return true;
	}
 	else{
 		return warn(theObj[0], LBL_SEX, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX, where, fromBlur);
 	}
}
// validazione campo indirizzo
function checkAddress(theObj, where, fromBlur){
	var theString=theObj.value;
	if (isEmpty(theString)) {
		hideError(where);
        return true;	
        //return warn(theObj, LBL_ADDR, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX);
	}
	if (!isValidLength(theString, MIN_ADDR_LENGTH, MAX_ADDR_LENGTH))
        return warn(theObj, LBL_ADDR, LBL_INVALIDLENGTHPREFIX, LBL_INVALIDLENGTHSUFFIX + " " + MIN_ADDR_LENGTH + " e " + MAX_ADDR_LENGTH, where, fromBlur);
	if (!checkString(theString, ALPHANUMERICS+SPECIAL+ADDR))
        return warn(theObj, LBL_ADDR, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX, where, fromBlur);
	hideError(where);
	return true;
}

function checkCity(theObj, where, fromBlur){
    var theString=theObj.value;
    if(isEmpty(theString)) {
		hideError(where);
        return true;
	}
    if (!isValidLength(theString, MIN_CITY_LENGTH, MAX_CITY_LENGTH))
        return warn(theObj, LBL_CITY, LBL_INVALIDLENGTHPREFIX, LBL_INVALIDLENGTHSUFFIX + " " + MIN_CITY_LENGTH + " e " + MAX_CITY_LENGTH, where, fromBlur);
	if (!checkString(theString, ALPHANUMERICS+SPECIAL+ADDR))
        return warn(theObj, LBL_CITY, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX, where, fromBlur);
	hideError(where);
    return true;
}
// validazione campo provincia
function checkSt(theObj, where, fromBlur){
	var theString="";
	if (!(theObj.options[0].selected))
        theString="selection";
	if (isEmpty(theString)) {
		hideError(where);
        return true;
        //return warn(theObj, LBL_ST, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX);
	}
	hideError(where);
	return true;
}
// validazione del campo CAP
function checkCap(theObj, where, fromBlur){
	var theString=theObj.value;
	if (isEmpty(theString))
        return warn(theObj, LBL_POSTALCODE, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX, where, fromBlur);
	if (!isValidLength(theString, MIN_POSTALCODE_LENGTH, MAX_POSTALCODE_LENGTH))
        return warn(theObj, LBL_POSTALCODE, "Il campo","deve contenere " + MIN_POSTALCODE_LENGTH + " cifre", where, fromBlur);
	if (!checkString(theString, DIGITS))
        return warn(theObj, LBL_POSTALCODE, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX, where, fromBlur);
	hideError(where);
	return true;
}
// validazione campo Stato
function checkCountry(theObj, where, fromBlur){
	var theString="";
	if (!(theObj.options[0].selected))
        theString="selection";
	if (isEmpty(theString)) {
		hideError(where);
		return true;
        //return warn(theObj,LBL_C,LBL_EMPTYPREFIX,LBL_EMPTYSUFFIX);
	}
	hideError(where);
	return true;
}
// validazione campo Telefono
function checkTelephone(theObj, where, fromBlur){
	var theString=theObj.value;
	if (!isValidLength(theString, MIN_TELEPHONENUMBER_LENGTH, MAX_TELEPHONENUMBER_LENGTH))
        return warn(theObj, LBL_TELEPHONENUMBER, LBL_INVALIDLENGTHPREFIX, LBL_INVALIDLENGTHSUFFIX + " " + MIN_TELEPHONENUMBER_LENGTH + " e " + MAX_TELEPHONENUMBER_LENGTH, where, fromBlur);
	if (!checkString(theString,DIGITS+TELEPHONE))
        return warn(theObj, LBL_TELEPHONENUMBER, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX, where, fromBlur);
	hideError(where);
	return true;
}
// validazione campo E-mail
function checkOtherEmail(theObj, where, fromBlur){
	var theString=theObj.value;
    if (isEmpty(theString)) {
        //return warn(theObj, LBL_OTHEREMAIL, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX);
		hideError(where);
        return true;
	}
    if (!isValidLength(theString, MIN_OTHEREMAIL_LENGTH, MAX_OTHEREMAIL_LENGTH))
        return warn(theObj, LBL_OTHEREMAIL, LBL_INVALIDLENGTHPREFIX, LBL_INVALIDLENGTHSUFFIX + " " + MIN_OTHEREMAIL_LENGTH + " e " + MAX_OTHEREMAIL_LENGTH, where, fromBlur);
    if (!checkString(theString, ALPHANUMERICS+MAIL))
        return warn(theObj, LBL_OTHEREMAIL, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX, where, fromBlur);
    if ((!contains(theString,"@.")) || (theString.indexOf("@")!=theString.lastIndexOf("@")))
        return warn(theObj, LBL_OTHEREMAIL, LBL_WRONGFORMATPREFIX, LBL_WRONGFORMATSUFFIX, where, fromBlur);
	hideError(where);
    return true;
}

// Validazione del codice-immagine generato dinamicamente
function checkImageCode(theObj, where, fromBlur) {
  var theString=theObj.value;
  if (isEmpty(theString))
    return warn(theObj, LBL_IMAGE_CODE, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX, where, fromBlur);
  hideError(where);
  return true;
}

/*
// validazione campo Codice Fiscale
function checkCF(theObj){
    return true;
}
*/

// validazione del campo Titolo di Studio
function checkQualification(theObj){
    /*
	var theString="";
	if (!(theObj.options[0].selected))
        theString="selection";
	if (isEmpty(theString))
        return warn(theObj, LBL_QUALIFICATIONS, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX);
    */
	return true;
}
// validazione del campo Professione
function checkOccupation(theObj){
    /*
	var theString="";
	if (!(theObj.options[0].selected))
        theString="selection";
	if (isEmpty(theString))
        return warn(theObj, LBL_OCCUPATION, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX);
    */
	return true;
}

// validazione campo NICKNAME
function checkNickname(theObj, where, fromBlur){
    var theString = theObj.value;
    if (isEmpty(theString))
        return warn(theObj, LBL_NICK, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX, where, fromBlur);
	if (!isValidLength(theString, MIN_UID_LENGTH, MAX_UID_LENGTH))
        return warn(theObj, LBL_NICK, LBL_INVALIDLENGTHPREFIX, LBL_INVALIDLENGTHSUFFIX + " " + MIN_UID_LENGTH + " e " + MAX_UID_LENGTH + " caratteri", where, fromBlur);
	if (!checkString(theString,ALPHANUMERICS+UID))
        return warn(theObj, LBL_NICK, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX, where, fromBlur);
	if (theString.charAt(theString.length-1) == ".")
        return warn(theObj, LBL_NICK, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX, where, fromBlur);
	if (theString.charAt(0) == ".")
        return warn(theObj, LBL_NICK, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX, where, fromBlur);
	hideError(where);
    return true;
}

// validazione campo USERNAME
function checkUsername(theObj, where, fromBlur){
    var theString = theObj.value;
    if (isEmpty(theString))
        return warn(theObj, LBL_UID, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX, where, fromBlur);
	if (!isValidLength(theString, MIN_UID_LENGTH, MAX_UID_LENGTH))
        return warn(theObj, LBL_UID, LBL_INVALIDLENGTHPREFIX, LBL_INVALIDLENGTHSUFFIX + " " + MIN_UID_LENGTH + " e " + MAX_UID_LENGTH, where, fromBlur);
	if (!checkString(theString,ALPHANUMERICS+UID))
        return warn(theObj, LBL_UID, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX, where, fromBlur);
	if (theString.charAt(theString.length-1) == ".")
        return warn(theObj, LBL_UID, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX, where, fromBlur);
	if (theString.charAt(0) == ".")
        return warn(theObj, LBL_UID, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX, where, fromBlur);
	hideError(where);
    return true;
}

// validazione campo PASSWORD
function checkPassword(theObj, usernameObj, where, fromBlur){
    var theString = theObj.value;
	if (isEmpty(theString))
        return warn(theObj, LBL_USERPASSWORD, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX, where, fromBlur);
	if (!isValidLength(theString,MIN_USERPASSWORD_LENGTH,MAX_USERPASSWORD_LENGTH))
        return warn(theObj, LBL_USERPASSWORD, LBL_INVALIDLENGTHPREFIX, LBL_INVALIDLENGTHSUFFIX + " " + MIN_USERPASSWORD_LENGTH + " e " + MAX_USERPASSWORD_LENGTH, where, fromBlur);
	if (!checkString(theString,ALPHANUMERICS+UID))
        return warn(theObj, LBL_USERPASSWORD, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX, where, fromBlur);
	if (theObj.value == usernameObj.value){
		return warn(theObj,'', LBL_USERNAMEEQUALSPASSWORD,'', where, fromBlur);
	}
	hideError(where);
	return true;
}

// validazione campo Domanda
function checkPwdQuestion(theObj, where, fromBlur){
    var theString=theObj.value;
	if (!isValidLength(theString, MIN_PASSWORDQUESTION_LENGTH, MAX_PASSWORDQUESTION_LENGTH))
        return warn(theObj, LBL_PASSWORDQUESTION, LBL_INVALIDLENGTHPREFIX, LBL_INVALIDLENGTHSUFFIX + " " + MIN_USERPASSWORD_LENGTH + " e " + MAX_USERPASSWORD_LENGTH, where, fromBlur);
	if (!checkString(theString, ALPHANUMERICS+SPECIAL+QUESTIONRESPONSE))
        return warn(theObj, LBL_PASSWORDQUESTION, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX, where, fromBlur);
	hideError(where);
	return true;
}
// validazione campo Risposta
function checkPwdAnswer(theObj, where, fromBlur){
	var theString=theObj.value;
	if (!isValidLength(theString, MIN_PASSWORDRESPONSE_LENGTH, MAX_PASSWORDRESPONSE_LENGTH))
        return warn(theObj, LBL_PASSWORDRESPONSE, LBL_INVALIDLENGTHPREFIX, LBL_INVALIDLENGTHSUFFIX + " " + MIN_USERPASSWORD_LENGTH + " e " + MAX_USERPASSWORD_LENGTH, where, fromBlur);
	if (!checkString(theString, ALPHANUMERICS+SPECIAL+QUESTIONRESPONSE))
        return warn(theObj, LBL_PASSWORDRESPONSE, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX, where, fromBlur);
	hideError(where);
	return true;
}

// verifica conferma campo PASSWORD
function checkPasswordConfirm(pwdObj, pwdConfirmObj, where, fromBlur){
	if (pwdObj.value != pwdConfirmObj.value){
		return warn(pwdObj, LBL_USERPASSWORDCONFIRM, LBL_NOTMATCHINGPREFIX, LBL_NOTMATCHINGSUFFIX, where, fromBlur);
	}
	hideError(where);
	return true;
}
// verifica conferma campo Risposta
function checkPwdAnswerConfirm(answerObj, answerConfirmObj, where, fromBlur){
	if (answerObj.value != answerConfirmObj.value){
		return warn(answerObj, LBL_PASSWORDRESPONSECONFIRMATION, LBL_NOTMATCHINGPREFIX, LBL_NOTMATCHINGSUFFIX, where, fromBlur);
	}
	hideError(where);
	return true;
}
// verifica conferma campo USERNAME
function checkUsernameConfirm(usernameObj, usernameConfirmObj, where, fromBlur){
	if (usernameObj.value != usernameConfirmObj.value){
		return warn(usernameObj, LBL_USERNAMECONFIRM, LBL_NOTMATCHINGPREFIX, LBL_NOTMATCHINGSUFFIX, where, fromBlur);
	}
	hideError(where);
	return true;
}

/****************************** FUNZIONI BASE *********************************/

function checkString(theString,universe){
	var currentChar;
	for(i=0;i<theString.length;i++){
		currentChar=theString.charAt(i);
		if (universe.indexOf(currentChar)==-1) return false;
	}
	return true;
}

function isValidLength(theString,min,max){
	if(theString.length>=min && theString.length<=max) return true; else return false;
}

function isEmpty(theString){
	if (theString==null) return true;
	if (theString.length<1) return true;
	if (theString=="") return true;
	if (checkString(theString,WHITESPACE)) return true;
	return false;
}

function contains(theString,universe){
	var currentChar;
	for(i=0;i<universe.length;i++){
		currentChar=universe.charAt(i);
		if (theString.indexOf(currentChar)==-1) return false;
	}
	return true;
}

function setError(msg) {
	if ($('error_bar')) {
		if ($('error_bar').innerHTML != '') 
			new Insertion.Bottom('error_bar', '<BR/>');
		new Insertion.Bottom('error_bar',msg);
		$('error_bar').show();
		$('error_bar').scrollTo();
	} else alert(msg);
}

function showError(where, message) {
	if ($('error_' + where).innerHTML != '') 
			new Insertion.Bottom('error_' + where, '<BR/>');
	new Insertion.Bottom('error_' + where, message);
	$('error_' + where).innerHTML = message;	
	if (!$('error_' + where).up().hasClassName('input_Error')) {
		$('error_' + where).setStyle({ 'visibility': 'hidden' });
		$('error_' + where).show();
		$('error_' + where).up().setStyle({ 'backgroundColor': '#7D8C94'});
		$('error_' + where).up().addClassName('input_Error');
		new Effect.Morph($('error_' + where).up(), { style: { 'background-color': '#ED9C9B' }, duration: 0.5, afterFinish: function () { $('error_' + where).setStyle({ 'visibility': '' }); } });
	}
	$('error_' + where).up().scrollTo();
}
function hideError(where) {
	$('error_' + where).hide();
	$('error_' + where).innerHTML = '';
	if ($('error_' + where).up().hasClassName('input_Error')) {
		$('error_' + where).up().setStyle({ 'backgroundColor': '#ED9C9B'});
		$('error_' + where).up().removeClassName('input_Error');
		new Effect.Morph($('error_' + where).up(), { style: { 'background-color': '#7D8C94' }, duration: 0.5 });
	}
}

function warn(theObj, fieldName, mPrefix, mSuffix, where, fromBlur){
	if (where != null) {
		showError(where,mPrefix + " " + fieldName + " " + mSuffix);
	} else {
		alert (mPrefix + " " + fieldName + " " + mSuffix);
	}
	if (!fromBlur) {
		theObj.focus();
	}
	return false;
}

function warnOld(theObj,fieldName,mPrefix,mSuffix,where){
	if ($('error_bar')) {
		if ($('error_bar').innerHTML != '') 
			new Insertion.Bottom('error_bar', '<BR/>');
		var msg = mPrefix + " " + fieldName + " " + mSuffix;
		new Insertion.Bottom('error_bar', msg);
		$('error_bar').show();
		$('error_bar').scrollTo();
	} else {
		alert (mPrefix + " " + fieldName + " " + mSuffix);
	}
	theObj.focus();
	return false;
}

function promptEntry (theString){
	window.status = theString;
}

/****** per le date ... ****/

var daysInMonth=new Array();
daysInMonth[1] = 31;
daysInMonth[2] = 29;
daysInMonth[3] = 31;
daysInMonth[4] = 30;
daysInMonth[5] = 31;
daysInMonth[6] = 30;
daysInMonth[7] = 31;
daysInMonth[8] = 31;
daysInMonth[9] = 30;
daysInMonth[10] = 31;
daysInMonth[11] = 30;
daysInMonth[12] = 31;

function isValidYear(theString){
	if (isEmpty(theString)) return false;
	if (!isValidLength(theString,4,4)) return false;
	if (!checkString(theString,DIGITS)) return false;
	var century=(theString.charAt(0)+theString.charAt(1));
	if (!(century=="19" || century=="20")) return false;
	if (parseInt(theString)>2000) return false;
	return true;
}

function isLeapYear(year){
	intYear=parseInt(year);
	if ((intYear%4==0 && !(intYear%100==0)) || ((intYear%4==0 && intYear%100==0) && intYear%400==0))
        return true;
	return false;
}
function checkDate(dayObj,monthObj,yearObj,where, fromBlur){
	var day=dayObj.selectedIndex + 1;
	var month=monthObj.selectedIndex + 1;
	var year=yearObj.value;
	var retval=true;

	if (!isValidYear(year)) retval=false;

	if (month==2){
		if (isLeapYear(year)){
			if (!(day<=29 && day>=1)) retval=false;
		}
		else{
			if (!(day<=28 && day>=1)) retval=false;
		}
	}
	else{
		var days=daysInMonth[month];
		if (!(day<=days && day>=1)) retval=false;
	}

	if (!retval){
		warn(dayObj,LBL_DATEOFBIRTH,LBL_WRONGFORMATPREFIX,LBL_WRONGFORMATSUFFIX,where, fromBlur);
	} else {
		hideError(where);
	}
	return retval;
}


// ===============================================================================
// === GESTIONE DI COMBO MASTER E COMBO SLAVE

function listItem(itemId, itemValue, itemText) {
  this.itemId = itemId;
  this.itemValue = itemValue;
  this.itemText = itemText;
}

function populateSlaveList(masterId, slaveObj, slaveArray) {
  //this block clears the current listings in the second dropdown, if the dropdown has any
  slaveObj.selectedIndex = 0;
  isVisible = 0;
  if (slaveObj.options.length > 1) {
    for (x = slaveObj.options.length - 1; x > 0; x--) {
      slaveObj.options[x] = null;
    }
  }
  //this block populates the second drop down, by matching the selected value of dropdown 1
  //to the lookup value of the list items
  for (x = 0; x < slaveArray.length; x++) {
    if (slaveArray[x].itemId == masterId) {
      listOpt = document.createElement("option");
      listOpt.value = slaveArray[x].itemValue;
      listOpt.text = slaveArray[x].itemText;
      slaveObj.add(listOpt);
    }
  }
}
// ===============================================================================
