var chars="";

var DIGITS="0123456789";
var ALPHABETICS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
var ALPHANUMERICS = ALPHABETICS + DIGITS;
var SPECIAL = "A@BCEDFGIHJKMLNOPQSRTUVXZY[\]^_a`bcedfgihjkmlnopqsrtuvxzy{|}";
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 = 6;
var MAX_PASSWORDRESPONSE_LENGTH = 60;
var MIN_PASSWORDRESPONSE_LENGTH = 6;
var MAX_IMA_LENGTH=60;
var MIN_IMA_LENGTH=0;

/************** 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_USER="User";
var LBL_USERPASSWORD="Password";
var LBL_USERPASSWORDCONFIRM="Password";
var LBL_PASSWORDQUESTION="Domanda";
var LBL_PASSWORDRESPONSE="Risposta";
var LBL_PASSWORDRESPONSECONFIRMATION="Risposta";
var LBL_PROMOTIONALINFO="Promotional_info";
var LBL_IMA="Immagine";

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";


/*************** FUNZIONI PER VALIDAZIONE CAMPI REGISTRAZIONE *****************/

/* validazione del campo "NAME" */
function checkName(theObj){
    var theString=theObj.value;
    if (isEmpty(theString))
        return warn(theObj, LBL_NAME,LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX);
    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);
	if (!checkString(theString, ALPHABETICS+SPECIAL+NAME))
        return warn(theObj, LBL_NAME,LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
    return true;
}

// validazione del campo "SURNAME"
function checkSurname(theObj){
	var theString=theObj.value;
	if (isEmpty(theString))
        return warn(theObj, LBL_SN, LBL_EMPTYPREFIX,LBL_EMPTYSUFFIX);
	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);
	if (!checkString(theString, ALPHABETICS+SPECIAL+SURNAME))
        return warn(theObj, LBL_SN, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
	return true;
}

// validazione del campo "DYNIMAGE"
function checkImage(theObj){
        var theString=theObj.value;
        if (isEmpty(theString))
        return warn(theObj, LBL_IMA, LBL_EMPTYPREFIX,LBL_EMPTYSUFFIX);
        if (!isValidLength(theString, MIN_IMA_LENGTH,MAX_IMA_LENGTH))
        return warn(theObj, LBL_IMA, LBL_INVALIDLENGTHPREFIX,LBL_INVALIDLENGTHSUFFIX + " " + MIN_IMA_LENGTH + " e " + MAX_IMA_LENGTH);
        if (!checkString(theString, ALPHANUMERICS))
        return warn(theObj, LBL_IMA, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
        return true;
}

// validazione data di nasciata
function checkDateOfBirth(dayObj,monthObj,yearObj){
	return checkDate(dayObj, monthObj, yearObj);
}

// validazione campo sesso
function checkSex (theObj){
	var theString = theObj.value;
	if ((theObj[0].checked) || (theObj[1].checked)){
		return true;
	}
 	else{
 		return warn(theObj[0], LBL_SEX, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX);
 	}
}
// validazione campo indirizzo
function checkAddress(theObj){
	var theString=theObj.value;
	if (isEmpty(theString))
        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);
	if (!checkString(theString, ALPHANUMERICS+SPECIAL+ADDR))
        return warn(theObj, LBL_ADDR, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
	return true;
}

function checkCity(theObj){
    var theString=theObj.value;
    if(isEmpty(theString))
        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);
	if (!checkString(theString, ALPHANUMERICS+SPECIAL+ADDR))
        return warn(theObj, LBL_CITY, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
    return true;
}
// validazione campo provincia
function checkSt(theObj){
	var theString="";
	if (!(theObj.options[0].selected))
        theString="selection";
	if (isEmpty(theString))
        return true;
        //return warn(theObj, LBL_ST, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX);
	return true;
}
// validazione del campo CAP
function checkCap(theObj){
	var theString=theObj.value;
	if (isEmpty(theString))
        //return warn(theObj, LBL_POSTALCODE, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX);
        return true;
	if (!isValidLength(theString, MIN_POSTALCODE_LENGTH, MAX_POSTALCODE_LENGTH))
        return warn(theObj, LBL_POSTALCODE, "Il campo","deve contenere " + MIN_POSTALCODE_LENGTH + " cifre");
	if (!checkString(theString, DIGITS))
        return warn(theObj, LBL_POSTALCODE, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
	return true;
}
// validazione campo Stato
function checkCountry(theObj){
	var theString="";
	if (!(theObj.options[0].selected))
        theString="selection";
	if (isEmpty(theString))
        return true;
        //return warn(theObj,LBL_C,LBL_EMPTYPREFIX,LBL_EMPTYSUFFIX);
	return true;
}
// validazione campo Telefono
function checkTelephone(theObj){
	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);
	if (!checkString(theString,DIGITS+TELEPHONE))
        return warn(theObj, LBL_TELEPHONENUMBER, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
	return true;
}
// validazione campo E-mail
function checkOtherEmail(theObj){
	var theString=theObj.value;
    if (isEmpty(theString))
        //return warn(theObj, LBL_OTHEREMAIL, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX);
        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);
    if (!checkString(theString, ALPHANUMERICS+MAIL))
        return warn(theObj, LBL_OTHEREMAIL, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
    if ((!contains(theString,"@.")) || (theString.indexOf("@")!=theString.lastIndexOf("@")))
        return warn(theObj, LBL_OTHEREMAIL, LBL_WRONGFORMATPREFIX, LBL_WRONGFORMATSUFFIX);
    return true;
}

function checkOtherEmailNotOpt(theObj){
	var theString=theObj.value;
    if (isEmpty(theString))
        return warn(theObj, LBL_OTHEREMAIL, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX);
    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);
    if (!checkString(theString, ALPHANUMERICS+MAIL))
        return warn(theObj, LBL_OTHEREMAIL, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
    if ((!contains(theString,"@.")) || (theString.indexOf("@")!=theString.lastIndexOf("@")))
        return warn(theObj, LBL_OTHEREMAIL, LBL_WRONGFORMATPREFIX, LBL_WRONGFORMATSUFFIX);
    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 USERNAME
function checkUsername(theObj){
    var theString = theObj.value;
    if (isEmpty(theString))
        return warn(theObj, LBL_UID, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX);
	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);
	if (!checkString(theString,ALPHANUMERICS+UID))
        return warn(theObj, LBL_UID, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
	if (theString.charAt(theString.length-1) == ".")
        return warn(theObj, LBL_UID, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
	if (theString.charAt(0) == ".")
        return warn(theObj, LBL_UID, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
    return true;
}

// validazione campo USER
function checkUser(theObj){
    var theString = theObj.value;
    if (isEmpty(theString))
        return warn(theObj, LBL_USER, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX);
	if (!isValidLength(theString, MIN_UID_LENGTH, MAX_UID_LENGTH))
        return warn(theObj, LBL_USER, LBL_INVALIDLENGTHPREFIX, LBL_INVALIDLENGTHSUFFIX + " " + MIN_UID_LENGTH + " e " + MAX_UID_LENGTH);
	if (!checkString(theString,ALPHANUMERICS+UID))
        return warn(theObj, LBL_USER, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
	if (theString.charAt(theString.length-1) == ".")
        return warn(theObj, LBL_USER, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
	if (theString.charAt(0) == ".")
        return warn(theObj, LBL_USER, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
    return true;
}

// validazione campo PASSWORD
function checkPassword(theObj, usernameObj){
    var theString = theObj.value;
	if (isEmpty(theString))
        return warn(theObj, LBL_USERPASSWORD, LBL_EMPTYPREFIX, LBL_EMPTYSUFFIX);
	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);
	if (!checkString(theString,ALPHANUMERICS+UID))
        return warn(theObj, LBL_USERPASSWORD, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
	if (theObj.value == usernameObj.value){
		return warn(theObj,'', LBL_USERNAMEEQUALSPASSWORD,'');
	}
	return true;
}

// validazione campo Domanda
function checkPwdQuestion(theObj){
    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);
	if (!checkString(theString, ALPHANUMERICS+SPECIAL+QUESTIONRESPONSE))
        return warn(theObj, LBL_PASSWORDQUESTION, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
	return true;
}
// validazione campo Risposta
function checkPwdAnswer(theObj){
	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);
	if (!checkString(theString, ALPHANUMERICS+SPECIAL+QUESTIONRESPONSE))
        return warn(theObj, LBL_PASSWORDRESPONSE, LBL_INVALIDCHARSPREFIX, LBL_INVALIDCHARSSUFFIX+" ("+chars+")");
	return true;
}

// verifica conferma campo PASSWORD
function checkPasswordConfirm(pwdObj, pwdConfirmObj){
	if (pwdObj.value != pwdConfirmObj.value){
		return warn(pwdObj, LBL_USERPASSWORDCONFIRM, LBL_NOTMATCHINGPREFIX, LBL_NOTMATCHINGSUFFIX);
	}
	return true;
}
// verifica conferma campo Risposta
function checkPwdAnswerConfirm(answerObj, answerConfirmObj){
	if (answerObj.value != answerConfirmObj.value){
		return warn(answerObj, LBL_PASSWORDRESPONSECONFIRMATION, LBL_NOTMATCHINGPREFIX, LBL_NOTMATCHINGSUFFIX);
	}
	return true;
}

/****************************** FUNZIONI BASE *********************************/


function checkString(theString,universe){
	chars="";
	var currentChar;
	for(i=0;i<theString.length;i++){
		currentChar=theString.charAt(i);
		if (universe.indexOf(currentChar)==-1){
			if(chars=="")
			 	chars=chars+currentChar;
			 else
			 	chars=chars+","+currentChar;
		}
	}
	if(chars.length>0)
		return false;
	else		
		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 warn(theObj,fieldName,mPrefix,mSuffix){
	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){
	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);
	}
	return retval;
}
