// esegue un controllo sul fatto che sia stato modificato il campo email
function checkOldEmail(alertOldEmail)
{
	if (getObj('email').value != getObj('old_email').value)
	{
		var confirmMail = confirm(alertOldEmail);
		if (!confirmMail)
			getObj('email').value = getObj('old_email').value;
	}
}

// esegue un controllo sui campi password e password_confirm all'atto di una nuova iscrizione
function checkPassword(alertErrorPassword)
{
	if (getObj('password').value == getObj('password_confirm').value)
		return true;
	else 
	{
		alert(alertErrorPassword);
		return false;
	}
}

// esegue un controllo sui campi password_old, password e password_confirm all'atto della modifica dei campi.
function checkOldPassword(alertErrorActualPwd, alertErrorNewPassword)
{
	if (getObj('old_password').value != '')
	{
		if 
			(
				(getObj('password').value=='' && getObj('password_confirm').value=='')
				|| 
				(getObj('password').value==getObj('password_confirm').value)
			)
			return true; 
		else
		{
			alert(alertErrorNewPassword);
			return false;
		}
	}
	else
	{
		alert(alertErrorActualPwd);
		return false;
	}
}

// esegue dei controlli su una lista di campi, colorandoli e mostrando un messaggio d'errore alla richiesta.
function checkInputs(fields, colorError, colorOk, showAlert, alertText)
{
	
	var alertError = new Array();
	
	for (var i=0;i<fields.length;i++)
	{
		var fieldObj = fields[i][0];
		var fieldText = fields[i][1];
		var fieldValidate = fields[i][2];
		var fieldOther = fields[i][3];
		var fieldError;
		
		if (fieldValidate == 'isValidPassword')
			fieldError = (getObj(fieldObj).value.isValidPassword()=="");
		else if (fieldValidate == 'isValidCodiceFiscale')
			fieldError = (!checkCodiceFiscale(getObj(fieldObj).value));
		else if (fieldValidate == 'isValidPartitaIva')
			fieldError = (!checkPartitaIva(getObj(fieldObj).value));
		else if (fieldValidate == 'isValidEMail')
			fieldError = (getObj(fieldObj).value.isValidEMail()=="");
		else if (fieldValidate == 'isNumeric')
			fieldError = (getObj(fieldObj).value.isNumeric()=="");
		else if (fieldValidate == 'isNumericMin' && fieldOther != '')
			fieldError = (getObj(fieldObj).value.isNumeric()=="" || parseInt(getObj(fieldObj).value,10) < fieldOther);
		else if (fieldValidate == 'isNumericMax' && fieldOther != '')
			fieldError = (getObj(fieldObj).value.isNumeric()=="" || parseInt(getObj(fieldObj).value,10) > fieldOther);
		else if (fieldValidate == 'isNumericBtw' && fieldOther != '')
		{
			var minmax = fieldOther.split("|");
			if (minmax[0]!="" && minmax[1]!="")
				fieldError = (getObj(fieldObj).value.isNumeric()=="" || !(parseInt(getObj(fieldObj).value,10) >= minmax[0] && parseInt(getObj(fieldObj).value,10) <= minmax[1]));
		}
		else if (fieldValidate == 'isValidDate')
			fieldError = !isValidDate(getObj(fieldObj[0]).value, getObj(fieldObj[1]).value, getObj(fieldObj[2]).value,false);
		else if (fieldValidate == 'isValidFutureDate')
			fieldError = !isValidFutureDate(getObj(fieldObj[0]).value, getObj(fieldObj[1]).value, getObj(fieldObj[2]).value);
		else if (fieldValidate == 'isValidDateTime')
			fieldError = !isValidDateTime(getObj(fieldObj[0]).value, getObj(fieldObj[1]).value, getObj(fieldObj[2]).value, getObj(fieldObj[3]).value, getObj(fieldObj[4]).value);
		else if (fieldValidate == 'isValidBornDate')
			fieldError = !isValidDate(getObj(fieldObj[0]).value, getObj(fieldObj[1]).value, getObj(fieldObj[2]).value,true);
		else if (fieldValidate == 'isPastDateComparedTo')
		{
			var datearray = fieldOther.split('-');
			fieldError = !isPastFutureDate('past',getObj(fieldObj[0]).value, getObj(fieldObj[1]).value, getObj(fieldObj[2]).value,datearray[2],datearray[1],datearray[0]);
		}
		else if (fieldValidate == 'isFutureDateComparedTo')
		{
			var datearray = fieldOther.split('-');
			fieldError = !isPastFutureDate('future',getObj(fieldObj[0]).value, getObj(fieldObj[1]).value, getObj(fieldObj[2]).value,datearray[2],datearray[1],datearray[0]);
		}
		else if (fieldValidate == 'isDateBetween')
		{
			var datearray = fieldOther.split('|');
			var datefirst = datearray[0].split('-');
			var datelast = datearray[1].split('-');
			fieldError = !isDateBetween(getObj(fieldObj[0]).value, getObj(fieldObj[1]).value, getObj(fieldObj[2]).value,datefirst[2],datefirst[1],datefirst[0],datelast[2],datelast[1],datelast[0]);
		}
		else if (fieldValidate == 'checked')
			fieldError = (!getObj(fieldObj).checked);
		else if (fieldValidate == 'minlength' && fieldOther != '')
			fieldError = !(getObj(fieldObj).value.trim().length >= fieldOther);
		else if (fieldValidate == 'length' && fieldOther != '')
			fieldError = !(getObj(fieldObj).value.trim().length == fieldOther);
		else if (fieldValidate == 'isLetter')
		{
			var letters = getObj(fieldObj).value.trim().toLowerCase();
			if (letters=='')
				fieldError = true;
			else
			{
				var isLetteral = true;
				letters = letters.split("");
				for (var k=0;k<letters.length;k++)
					if (!(isLetteral && letters[k]>="a" && letters[k]<="z"))
						isLetteral = false;
				fieldError = !isLetteral;
			}
		}
		else if (fieldValidate == 'radiochecked')
		{
			// fieldObj deve contenere l'id del contenitore dei radio da controllare
			var container = document.getElementById(fieldObj);
			if (container)
			{
				var oneIsChecked = false;
				var radios = container.getElementsByTagName ('input');
				if (radios)
					for (var r=0;r<radios.length;++r)
						if (radios[r].type == 'radio' && !oneIsChecked && radios[r].checked)
							oneIsChecked = true;
			}
			fieldError = !oneIsChecked;
		}
		else if (fieldValidate == 'checkboxchecked')
		{
			// fieldObj deve contenere l'id del contenitore dei checkbox da controllare
			var container = document.getElementById(fieldObj);
			if (container)
			{
				var oneIsChecked = false;
				var checkboxs = container.getElementsByTagName ('input');
				if (checkboxs)
					for (var r=0;r<checkboxs.length;++r)
						if (checkboxs[r].type == 'checkbox' && !oneIsChecked && checkboxs[r].checked)
							oneIsChecked = true;
			}
			fieldError = !oneIsChecked;
		}
		else
			fieldError = (getObj(fieldObj).value.trim()=="")
		
		if (fieldError)
		{
			alertError[alertError.length] = ' '+fieldText;
			if (fieldValidate == 'isValidDate' || fieldValidate == 'isValidDateTime' || fieldValidate == 'isValidBornDate' || fieldValidate == 'isValidFutureDate' || fieldValidate == 'isPastDateComparedTo' || fieldValidate == 'isFutureDateComparedTo' || fieldValidate == 'isDateBetween')
			{
				getObj(fieldObj[0]).style.backgroundColor=colorError;
				getObj(fieldObj[1]).style.backgroundColor=colorError;
				getObj(fieldObj[2]).style.backgroundColor=colorError;
				if (fieldValidate == 'isValidDateTime')
				{
					getObj(fieldObj[3]).style.backgroundColor=colorError;
					getObj(fieldObj[4]).style.backgroundColor=colorError;
				}
			}
			else
				getObj(fieldObj).style.backgroundColor=colorError;
		}
		else
		{
			if (fieldValidate == 'isValidDate' || fieldValidate == 'isValidDateTime' || fieldValidate == 'isValidBornDate' || fieldValidate == 'isValidFutureDate' || fieldValidate == 'isPastDateComparedTo' || fieldValidate == 'isFutureDateComparedTo' || fieldValidate == 'isDateBetween')
			{
				getObj(fieldObj[0]).style.backgroundColor=colorOk;
				getObj(fieldObj[1]).style.backgroundColor=colorOk;
				getObj(fieldObj[2]).style.backgroundColor=colorOk;
				if (fieldValidate == 'isValidDateTime')
				{
					getObj(fieldObj[3]).style.backgroundColor=colorOk;
					getObj(fieldObj[4]).style.backgroundColor=colorOk;
				}
			}
			else
				getObj(fieldObj).style.backgroundColor=colorOk;
		}
	}
	
	if (showAlert == 1 && alertError.length > 0)
		alert(alertText+' '+alertError);
	if (alertError.length > 0)
		return false;
	else
		return true;
	
}

function trimNumber(s)
{
  while (s.substr(0,1) == '0' && s.length>1) 
		s = s.substr(1,9999);
  return s;
}

function completeDate(id,what)
{
	if (what=='day' || what=='month' || what=='hour' || what=='minute')
	{
		if (getObj(id).value.length==1)
		getObj(id).value = '0'+getObj(id).value;
	}
	else if (what=='year')
	{
		if (getObj(id).value.length==1)
			getObj(id).value = '190'+getObj(id).value;
		else if (getObj(id).value.length==2)
			getObj(id).value = '19'+getObj(id).value;
		else if (getObj(id).value.length==3)
			getObj(id).value = '1'+getObj(id).value;
	}
}

function checkCodiceFiscale(cf)
{
	
	cf = cf.trim();
	
	if (cf == '')
		return false;
	if (cf.length != 16)
		return false;
	
	var validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	var s = 0;
	var i = 0;
	var set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	var set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
	var setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	var setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
	
	cf = cf.toUpperCase();
	
	for (i=0; i<16; i++)
		if (validi.indexOf(cf.charAt(i)) == -1)
			return false;
	
	for (i=1; i<=13; i+=2)
		s += setpari.indexOf(set2.charAt(set1.indexOf(cf.charAt(i))));
	for (i=0; i<=14; i+=2)
		s += setdisp.indexOf(set2.charAt(set1.indexOf(cf.charAt(i))));
	
	if (s%26 != cf.charCodeAt(15)-'A'.charCodeAt(0))
		return false;
	
	return true;
	
}

function checkPartitaIva(pi)
{
	
	pi = pi.trim();
	
	if (pi == '')
		return false;
	if (pi.length != 11)
		return false;
	
	var i = 0;
	var s = 0;
	var c = 0;
	var validi = "0123456789";
	
	for (i=0; i<11; i++)
		if( validi.indexOf( pi.charAt(i) ) == -1 )
			return false;
	
	for (i=0; i<=9; i+=2)
		s += pi.charCodeAt(i) - '0'.charCodeAt(0);
	for (i=1; i<=9; i+=2)
	{
		c = 2 * (pi.charCodeAt(i) - '0'.charCodeAt(0));
		if (c > 9)
			c = c - 9;
		s += c;
	}
	
	if ((10 - s%10)%10 != pi.charCodeAt(10) - '0'.charCodeAt(0))
		return false;
	
	return true;
	
}
