function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}


function isStringOf(checkStr, checkOK) {
     var allValid = true;
     var i, j;

     for (i=0; i<checkStr.length; i++) {
        ch = checkStr.charAt(i);
        for (j=0; j<checkOK.length; j++) {
           if (ch == checkOK.charAt(j)) {
              break;
           }
        }
        if (j == checkOK.length) {
           allValid = false;
           break;
        }
     }
     if (!allValid)
        return (false);
     return (true);
}


function isInteger(str) {
    return isStringOf(str, '0123456789');
}

function isNum(str) {
    return isStringOf(str, '0123456789.');
}

function Dot2Comma(s) {
   var aux = '';

   if(s.length<1)
       return s;

   for (var i=0; i<s.length; i++) {
       if(s.charAt(i)=='.')
       	    aux = aux + ',';
       else
	    aux = aux + s.charAt(i);
   }
   return aux;
}

function Comma2Dot(s) {
   var aux = '';

   if(s.length<1)
       return s;

   for (var i=0; i<s.length; i++) {
       if(s.charAt(i)==',')
       	    aux = aux + '.';
       else
	    aux = aux + s.charAt(i);
   }
   return aux;
}

function de_punteggia(s) {
   var aux = '';

   if(s.length<1)
       return s;

   for (var i=0; i<s.length; i++) {
       if (s.charAt(i)!='.')
       aux = aux + s.charAt(i);
   }
   return aux;
}

function IR_IsDateMinorOrEqual(IR_cDate, IR_cThresholdDate)
{
	var IR_bResult;
	var IR_nYear;
	var IR_nDay;
	var IR_nMonth;
	var IR_nThresholdYear;
	var IR_nThresholdDay;
	var IR_nThresholdMonth;
	var IR_cThresholdDateAsString;

	IR_bResult = false;

	IR_cThresholdDateAsString = IR_cThresholdDate;
	IR_nYear = IR_cDate.substr(6,4);
	IR_nThresholdYear = IR_cThresholdDateAsString.substr(6,4);

	if(IR_nYear <= IR_nThresholdYear)
	{
		IR_bResult = true;

		if(IR_nYear == IR_nThresholdYear)
		{
			IR_bResult = false;

			IR_nMonth = IR_cDate.substr(3,2);
			IR_nThresholdMonth = IR_cThresholdDateAsString.substr(3,2);

			if(IR_nMonth <= IR_nThresholdMonth)
			{
				IR_bResult = true;

				if(IR_nMonth == IR_nThresholdMonth)
				{
					IR_bResult = false;

					IR_nDay = IR_cDate.substr(0,2);
					IR_nThresholdDay = IR_cThresholdDateAsString.substr(0,2);

					if(IR_nDay <= IR_nThresholdDay)
						IR_bResult = true;
				}
			}
		}
	}
//alert("result da MinorOrEgual: " + IR_bResult);
	return IR_bResult;
}

function IR_IsDateMinor(IR_cDate, IR_cThresholdDate)
{
	var IR_bResult;
	var IR_nYear;
	var IR_nDay;
	var IR_nMonth;
	var IR_nThresholdYear;
	var IR_nThresholdDay;
	var IR_nThresholdMonth;
	var IR_cThresholdDateAsString;

	IR_bResult = false;

	IR_cThresholdDateAsString = IR_cThresholdDate;
	IR_nYear = IR_cDate.substr(6,4);
	IR_nThresholdYear = IR_cThresholdDateAsString.substr(6,4);

	if(IR_nYear < IR_nThresholdYear)
		IR_bResult = true;
	else
	{
		if(IR_nYear == IR_nThresholdYear)
		{
			IR_bResult = false;

			IR_nMonth = IR_cDate.substr(3,2);
			IR_nThresholdMonth = IR_cThresholdDateAsString.substr(3,2);

			if(IR_nMonth < IR_nThresholdMonth)
				IR_bResult = true;
			else
			{
				if(IR_nMonth == IR_nThresholdMonth)
				{
					IR_bResult = false;

					IR_nDay = IR_cDate.substr(0,2);
					IR_nThresholdDay = IR_cThresholdDateAsString.substr(0,2);

					if(IR_nDay < IR_nThresholdDay)
						IR_bResult = true;
					else
					{
						if(IR_nDay == IR_nThresholdDay)
							IR_bResult = false;
					}
				}
			}
		}
	}
//alert("ret da minor : " + IR_bResult);
	return IR_bResult;
}

function IR_isStrutturaData(IR_cDate) {
    var numSeparators = 0;

    if((IR_cDate.length < 6) || (IR_cDate.length > 10))
        return false;
    for (var idx=0; idx<IR_cDate.length; idx++) {
        if((IR_cDate.charAt(idx)=='/') || (IR_cDate.charAt(idx)=='-'))
            numSeparators += 1;
    }
    return(numSeparators==2);
}

/* Rende il giorno da una stringa che dovrebbe rappresentare
   una data */
function IR_getDateDay(IR_cDate) {
    var aux = '';

    if(!IR_isStrutturaData(IR_cDate))
        return '';
    for (var idx=0; idx<IR_cDate.length; idx++) {
        if((IR_cDate.charAt(idx)=='/') || (IR_cDate.charAt(idx)=='-'))
            return aux;
        else
            aux += IR_cDate.charAt(idx);
    }
    return aux;
}

function IR_getDateMonth(IR_cDate) {
    var aux = '';
    var level = 0;

    if(!IR_isStrutturaData(IR_cDate))
        return '';
    for (var idx=0; idx<IR_cDate.length; idx++) {
        if((IR_cDate.charAt(idx)=='/') || (IR_cDate.charAt(idx)=='-')) {
            level += 1;

            if(level==2)
                return aux;
            aux = '';
        }
        else
            aux += IR_cDate.charAt(idx);
    }
    return aux;
}

function IR_getDateYear(IR_cDate) {
    var aux = '';
    var level = 0;

    if(!IR_isStrutturaData(IR_cDate))
        return '';
    for (var idx=0; idx<IR_cDate.length; idx++) {
        if((IR_cDate.charAt(idx)=='/') || (IR_cDate.charAt(idx)=='-')) {
            level += 1;

            if(level==3)
                return aux;
            aux = '';
        }
        else
            aux += IR_cDate.charAt(idx);
    }
    return aux;
}

function IR_IsValidDate(IR_cDate)
{
	var IR_bIsValid;
	var IR_cStr;
	var IR_nDay;
	var IR_nMonth;
	var IR_nYear;
	var IR_nMaximumDays;
	var day;
	var month;
	var year;

	IR_bIsValid = false;

        if(!IR_isStrutturaData(IR_cDate))
            return IR_bIsValid;

        day = IR_getDateDay(IR_cDate);
        if(day.length<2)
           day = '0' + day;
        month = IR_getDateMonth(IR_cDate);
        if(month.length<2)
           month = '0' + month;
        year = IR_getDateYear(IR_cDate);
        if(year.length<4)
           year = '20' + year;

        IR_cDate = day + '/' + month + '/' + year;

	if(IR_cDate.length == 10)
	{
		IR_bIsValid = IR_IsStringOfDigits(IR_cDate, 0, 2);

		if(IR_bIsValid)
			IR_bIsValid = IR_IsValidString(IR_cDate, 2, 3, '/-');

		if(IR_bIsValid)
			IR_bIsValid = IR_IsStringOfDigits(IR_cDate, 3, 5);

		if(IR_bIsValid)
			IR_bIsValid = IR_IsValidString(IR_cDate, 5, 6, '/-');

		if(IR_bIsValid)
			IR_bIsValid = IR_IsStringOfDigits(IR_cDate, 6, 10);

		if(IR_bIsValid)
		{
			IR_bIsValid = false;

			IR_cStr = IR_LeftTrimExtended(IR_cDate.substring(6, 10), '0');
			IR_nYear = parseInt(IR_cStr, 10);

			if(IR_nYear > 1899)
			{
				IR_cStr = IR_LeftTrimExtended(IR_cDate.substring(3, 5), '0');
				IR_nMonth = parseInt(IR_cStr, 10);

				if((IR_nMonth > 0) && (IR_nMonth < 13))
				{
					IR_cStr = IR_LeftTrimExtended(IR_cDate.substring(0, 2), '0');
					IR_nDay = parseInt(IR_cStr, 10);

					if(IR_nDay > 0)
					{
						switch(IR_nMonth)
						{
							case 2:
								if(IR_IsLeapYear(IR_nYear))
									IR_nMaximumDays = 29;
								else
									IR_nMaximumDays = 28;
							break;
							case 4:
							case 6:
							case 9:
							case 11:
								IR_nMaximumDays = 30;
							break;
							default:
								IR_nMaximumDays = 31;
							break;
						}

						if(IR_nDay <= IR_nMaximumDays)
							IR_bIsValid = true;
					}
				}
			}
		}
	}
//alert("ret da IsValid: " + IR_bIsValid);
	return IR_bIsValid;
}

function IR_GetDateAsString(IR_nDay, IR_nMonth, IR_nYear)
{
	var IR_cDate;

	IR_cDate = '';

	if(IR_nDay < 10)
		IR_cDate = '0' + IR_nDay + '/';
	else
		IR_cDate = IR_nDay + '/';

	if(IR_nMonth < 10)
		IR_cDate = IR_cDate + '0' + IR_nMonth + '/';
	else
		IR_cDate = IR_cDate + IR_nMonth + '/';

	IR_cDate = IR_cDate + IR_nYear;

	return IR_cDate;
}

function IR_IsLeapYear(IR_nYear)
{
	var IR_bIsLeapYear;

	IR_bIsLeapYear = false;

  if((IR_nYear % 4) == 0)
  {
    IR_bIsLeapYear = true;

    if((IR_nYear % 100) == 0)
    {
      if(IR_nYear % 400)
      {
        IR_bIsLeapYear = false;
      }
    }
  }

  return IR_bIsLeapYear;
}

function IR_DateToLong(IR_cDate)
{
	var IR_nDay;
	var IR_nMonth;
	var IR_nYear;
	var IR_nDate;
	var IR_nDay1;
	var IR_nMonth1;
	var IR_nMonth2;
	var IR_nDeltaYear;
	var IR_nCenturies;
	var IR_cStr;

	IR_nDate = -1;

	if(IR_IsValidDate(IR_cDate))
	{
		IR_cStr = IR_LeftTrimExtended(IR_cDate.substring(6, 10), '0');
		IR_nYear = parseInt(IR_cStr, 10);

		if(IR_nYear > 1800)
		{
			IR_cStr = IR_LeftTrimExtended(IR_cDate.substring(3, 5), '0');
			IR_nMonth = parseInt(IR_cStr, 10);
			IR_cStr = IR_LeftTrimExtended(IR_cDate.substring(0, 2), '0');
			IR_nDay = parseInt(IR_cStr, 10);
			IR_nDeltaYear = IR_nYear - 1800;
			IR_nDate = (IR_nDeltaYear * 365) + Math.floor((IR_nDeltaYear - 1) / 4);
			IR_nCenturies = Math.floor((IR_nDeltaYear - 1) / 100) + 2;
			IR_nDate -= ((IR_nCenturies - Math.floor(IR_nCenturies / 4)) - 2);
			IR_nMonth1 = IR_nMonth;
			IR_nMonth2 = 0;

			if(IR_nMonth > 8)
			{
				IR_nMonth1 = 8;
				IR_nMonth2 = IR_nMonth - IR_nMonth1;
			}

			IR_nDay1 = 0;

			if(IR_nMonth > 2)
			{
				IR_nDay1 = 1;
				if(IR_IsLeapYear(IR_nYear) == false)
					IR_nDay1 += 1;
			}

			IR_nDate += (((Math.floor(IR_nMonth1 / 2) * 31) + (Math.floor((IR_nMonth1 - 1) / 2) * 30) - IR_nDay1));
			IR_nDate += ((Math.floor((IR_nMonth2 + 1) / 2) * 31) + (Math.floor(IR_nMonth2 / 2) * 30));
			IR_nDate += (IR_nDay - 1);
		}
	}

	return IR_nDate;
}

function IR_SetYearFromLong(IR_nDate, IR_nYear)
{
	var IR_nBackDate;
	var IR_nDay;
	var IR_nDeltaDay;
	var IR_nMonth;
	var IR_nOldYear;
	var IR_nDeltaYear;
	var IR_nCenturies;

	IR_nOldYear = IR_GetYearFromLong(IR_nDate);
	IR_nMonth = IR_GetMonthFromLong(IR_nDate);
	IR_nDay = IR_GetDayFromLong(IR_nDate);
	IR_nDeltaYear = IR_nOldYear - 1800;
	IR_nDeltaDay = (IR_nDeltaYear * 365) + Math.floor((IR_nDeltaYear - 1) / 4);
	IR_nCenturies = Math.floor((IR_nDeltaYear - 1) / 100) + 2;
	IR_nDeltaDay -= ((IR_nCenturies - Math.floor(IR_nCenturies / 4)) - 2);
	IR_nBackDate = IR_nDate - IR_nDeltaDay;
	IR_nDeltaYear = IR_nYear - 1800;
	IR_nDeltaDay = (IR_nDeltaYear * 365) + Math.floor((IR_nDeltaYear - 1) / 4);
	IR_nCenturies = Math.floor((IR_nDeltaYear - 1) / 100) + 2;
	IR_nDeltaDay -= ((IR_nCenturies - Math.floor(IR_nCenturies / 4)) - 2);
	IR_nBackDate += IR_nDeltaDay;

	if((IR_nMonth > 2) && (IR_IsLeapYear(IR_nOldYear)) && (!IR_IsLeapYear(IR_nYear)))
		IR_nBackDate -= 1;

	if((IR_nMonth > 2) && (!IR_IsLeapYear(IR_nOldYear)) && (IR_IsLeapYear(IR_nYear)))
		IR_nBackDate += 1;

	return IR_nBackDate;
}

function IR_GetYearFromLong(IR_nDate)
{
	var IR_nYear;
	var IR_nDays;

  IR_nYear = 1800;
  IR_nDays = 0;

  while(IR_nDays <= IR_nDate)
	{
    if(IR_IsLeapYear(IR_nYear))
      IR_nDays += 366;
    else
      IR_nDays += 365;

    IR_nYear += 1;
	}

  IR_nYear -= 1;

	return IR_nYear;
}

function IR_SetMonthFromLong(IR_nDate, IR_nMonth)
{
	var IR_nDay = IR_GetDayFromLong(IR_nDate) - 1;
	var IR_nYear = IR_GetYearFromLong(IR_nDate);
	var IR_cDate = IR_GetDateAsString(1, IR_nMonth, IR_nYear);
	return IR_DateToLong(IR_cDate) + IR_nDay;
}

function IR_GetMonthFromLong(IR_nDate)
{
	var IR_nMonth;
	var IR_nYear;
	var IR_nDays;
	var IR_nDeltaYear;
	var IR_nCenturies;

	IR_nYear = IR_GetYearFromLong(IR_nDate);
	IR_nDeltaYear = IR_nYear - 1800;
	IR_nDays = (IR_nDeltaYear * 365) + Math.floor((IR_nDeltaYear - 1) / 4);
	IR_nCenturies = Math.floor((IR_nDeltaYear - 1) / 100) + 2;
	IR_nDays -= ((IR_nCenturies - Math.floor(IR_nCenturies / 4)) - 2);
  IR_nMonth = 1;

  while(IR_nDays <= IR_nDate)
  {
    switch(IR_nMonth)
    {
      case 1:
        IR_nDays += 31;
      break;
      case 2:
        if(IR_IsLeapYear(IR_nYear))
          IR_nDays += 29;
        else
          IR_nDays += 28;
      break;
      case 3:
        IR_nDays += 31;
      break;
      case 4:
        IR_nDays += 30;
      break;
      case 5:
        IR_nDays += 31;
      break;
      case 6:
        IR_nDays += 30;
      break;
      case 7:
        IR_nDays += 31;
      break;
      case 8:
        IR_nDays += 31;
      break;
      case 9:
        IR_nDays += 30;
      break;
      case 10:
        IR_nDays += 31;
      break;
      case 11:
        IR_nDays += 30;
      break;
      case 12:
        IR_nDays += 31;
      break;
    }

    IR_nMonth++;
	}

	IR_nMonth -= 1;

	return IR_nMonth;
}

function IR_SetDayFromLong(IR_nDate, IR_nDay)
{
	var IR_nMonth = IR_GetDayFromLong(IR_nDate);
	var IR_nYear = IR_GetYearFromLong(IR_nDate);
	var IR_cDate = IR_GetDateAsString(1, IR_nMonth, IR_nYear);
	return IR_DateToLong(IR_cDate) + (IR_nDay - 1);
}

function IR_GetDayFromLong(IR_nDate)
{
	var IR_nDay;
	var IR_nMonth;
	var IR_nYear;
	var IR_nDays;
	var IR_nDay1;
	var IR_nMonth1;
	var IR_nMonth2;
	var IR_nDeltaYear;
	var IR_nCenturies;

	IR_nYear = IR_GetYearFromLong(IR_nDate);
	IR_nMonth = IR_GetMonthFromLong(IR_nDate);
	IR_nDeltaYear = IR_nYear - 1800;
	IR_nDays = (IR_nDeltaYear * 365) + Math.floor((IR_nDeltaYear - 1) / 4);
	IR_nCenturies = Math.floor((IR_nDeltaYear - 1) / 100) + 2;
	IR_nDays -= ((IR_nCenturies - Math.floor(IR_nCenturies / 4)) - 2);
	IR_nMonth1 = IR_nMonth;
	IR_nMonth2 = 0;

	if(IR_nMonth > 8)
	{
		IR_nMonth1 = 8;
		IR_nMonth2 = IR_nMonth - IR_nMonth1;
	}

	IR_nDay1 = 0;

	if(IR_nMonth > 2)
	{
		IR_nDay1 = 1;

		if(IR_IsLeapYear(IR_nYear) == false)
			IR_nDay1 += 1;
	}

	IR_nDay = IR_nDays + (((Math.floor(IR_nMonth1 / 2) * 31) + (Math.floor((IR_nMonth1 - 1) / 2) * 30) - IR_nDay1));
	IR_nDay += ((Math.floor((IR_nMonth2 + 1) / 2) * 31) + (Math.floor(IR_nMonth2 / 2) * 30));
  IR_nDay = (IR_nDate - IR_nDay) + 1;

	return IR_nDay;
}

function IR_LongToDate(IR_nDate)
{
	var IR_nDay;
	var IR_nMonth;
	var IR_nYear;
	var IR_cDate;

	IR_nDay = IR_GetDayFromLong(IR_nDate);
	IR_nMonth = IR_GetMonthFromLong(IR_nDate);
	IR_nYear = IR_GetYearFromLong(IR_nDate);
	IR_cDate = IR_GetDateAsString(IR_nDay, IR_nMonth, IR_nYear);

	return IR_cDate;
}

function IR_GetTodayDateAsString()
{
	var IR_dDate = new Date();
	var IR_nDay = IR_dDate.getDate();
	var IR_nMonth = IR_dDate.getMonth() + 1;
	var IR_nYear = IR_dDate.getFullYear();
	var IR_cDay = IR_nDay + '';
	var IR_cMonth = IR_nMonth + '';
	var IR_cYear = IR_nYear + '';

	if(IR_cDay.length < 2)
		IR_cDay = '0' + IR_cDay;

	if(IR_cMonth.length < 2)
		IR_cMonth = '0' + IR_cMonth;

	return IR_cDay + '/' + IR_cMonth + '/' + IR_cYear;
}

function IR_GetDayDiffTwoDate(IR_cData1, IR_cData2)
{
	var IR_nDay;
	var IR_nDate1 = IR_DateToLong(IR_cData1);
	var IR_nDate2 = IR_DateToLong(IR_cData2);

	if((IR_nDate1 != -1) && (IR_nDate2 != -1))
	{
		if(IR_nDate1 <= IR_nDate2)
			IR_nDay = 0
		else
			IR_nDay = (IR_nDate1 - IR_nDate2);
	}

	return IR_nDay;
}

function IR_GetDateElapsedByDaysAsString(IR_nDays)
{
	var IR_cDate = IR_GetTodayDateAsString();
	var IR_nDate = IR_DateToLong(IR_cDate);

	if(IR_nDate != -1)
		IR_cDate = IR_LongToDate(IR_nDate - IR_nDays);

	return IR_cDate;
}

function IR_GetTodayDateAsLong()
{
	return IR_DateToLong(IR_GetTodayDateAsString());
}

function IR_DayOfWeek(IR_cDate)
{
	var IR_nDate;

	IR_nDate = IR_DateToLong(IR_cDate);

	if(IR_nDate > 0)
		IR_nDate = ((((IR_nDate - 1) % 7) + 4) % 7) + 1;

	return IR_nDate;
}

function IR_DayOfWeekFromLong(IR_nDate)
{
	var IR_nBackDate;

	IR_nBackDate = -1;

	if(IR_nDate > 0)
		IR_nBackDate = ((((IR_nDate - 1) % 7) + 4) % 7) + 1;

	return IR_nBackDate;
}

function IR_GetSundayBeforeEaster(IR_nYear)
{
	var IR_nYearModule;
	var IR_nEasterDay;
	var IR_nEasterMonth;

	IR_nYearModule = IR_nYear % 19;

	switch(IR_nYearModule)
	{
		case 0:
			IR_nEasterDay = 14;
			IR_nEasterMonth = 4;
		break;
		case 1:
			IR_nEasterDay = 3;
			IR_nEasterMonth = 4;
		break;
		case 2:
			IR_nEasterDay = 23;
			IR_nEasterMonth = 3;
		break;
		case 3:
			IR_nEasterDay = 11;
			IR_nEasterMonth = 4;
		break;
		case 4:
			IR_nEasterDay = 31;
			IR_nEasterMonth = 3;
		break;
		case 5:
			IR_nEasterDay = 18;
			IR_nEasterMonth = 4;
		break;
		case 6:
			IR_nEasterDay = 8;
			IR_nEasterMonth = 4;
		break;
		case 7:
			IR_nEasterDay = 28;
			IR_nEasterMonth = 3;
		break;
		case 8:
			IR_nEasterDay = 16;
			IR_nEasterMonth = 4;
		break;
		case 9:
			IR_nEasterDay = 5;
			IR_nEasterMonth = 4;
		break;
		case 10:
			IR_nEasterDay = 25;
			IR_nEasterMonth = 3;
		break;
		case 11:
			IR_nEasterDay = 13;
			IR_nEasterMonth = 4;
		break;
		case 12:
			IR_nEasterDay = 2;
			IR_nEasterMonth = 4;
		break;
		case 13:
			IR_nEasterDay = 22;
			IR_nEasterMonth = 3;
		break;
		case 14:
			IR_nEasterDay = 10;
			IR_nEasterMonth = 4;
		break;
		case 15:
			IR_nEasterDay = 30;
			IR_nEasterMonth = 3;
		break;
		case 16:
			IR_nEasterDay = 17;
			IR_nEasterMonth = 4;
		break;
		case 17:
			IR_nEasterDay = 7;
			IR_nEasterMonth = 4;
		break;
		case 18:
			IR_nEasterDay = 27;
			IR_nEasterMonth = 3;
		break;
	}

	return IR_DateToLong(IR_GetDateAsString(IR_nEasterDay, IR_nEasterMonth, IR_nYear));
}

function IR_IsMondayAfterEasterFromLong(IR_nDate)
{
	var IR_bReply;
	var IR_nMonth;
	var IR_nEasterDate;

	IR_bReply = false;
	IR_nMonth = IR_GetMonthFromLong(IR_nDate);

	if((IR_DayOfWeekFromLong(IR_nDate) == 2) &&
		 ((IR_nMonth == 3) || (IR_nMonth == 4)))
	{
		IR_nEasterDate = IR_GetSundayBeforeEaster(IR_GetYearFromLong(IR_nDate));
		IR_nEasterDate += 1;

		while(IR_DayOfWeekFromLong(IR_nEasterDate) != 1)
			IR_nEasterDate += 1;

		IR_nEasterDate += 1;

		IR_bReply = (IR_nDate == IR_nEasterDate);
	}

	return IR_bReply;
}

function IR_IsFridayBeforeEasterFromLong(IR_nDate)
{
	var IR_bReply;
	var IR_nMonth;
	var IR_nEasterDate;

	IR_bReply = false;
	IR_nMonth = IR_GetMonthFromLong(IR_nDate);

	if((IR_DayOfWeekFromLong(IR_nDate) == 6) &&
		 ((IR_nMonth == 3) || (IR_nMonth == 4)))
	{
		IR_nEasterDate = IR_GetSundayBeforeEaster(IR_GetYearFromLong(IR_nDate));

		while(IR_DayOfWeekFromLong(IR_nEasterDate) != 6)
			IR_nEasterDate += 1;

		IR_bReply = (IR_nDate == IR_nEasterDate);
	}

	return IR_bReply;
}

function IR_MakeLavorativoFromLong(IR_nDate)
{
	var IR_x;
	var IR_bDone;
	var IR_bFound;
	var IR_nDay;
	var IR_nMonth;
	var IR_nBackDate;
	var IR_nDayOfWeek;

	IR_bDone = false;
	IR_nBackDate = IR_nDate;

	while(!IR_bDone)
	{
		IR_nDayOfWeek = IR_DayOfWeekFromLong(IR_nBackDate);

		if((IR_nDayOfWeek != 1) && (IR_nDayOfWeek != 7))
		{
			IR_x = 0;
			IR_bFound = false;
			IR_nDay = IR_GetDayFromLong(IR_nBackDate);
			IR_nMonth = IR_GetMonthFromLong(IR_nBackDate);

			switch(IR_nMonth)
			{
				case 1:
					IR_bFound = ((IR_nDay == 1) || (IR_nDay == 6));
				break;
				case 4:
					IR_bFound = (IR_nDay == 25);
				break;
				case 5:
					IR_bFound = (IR_nDay == 1);
				break;
				case 8:
					IR_bFound = ((IR_nDay == 14) || (IR_nDay == 15));
				break;
				case 11:
					IR_bFound = (IR_nDay == 1);
				break;
				case 12:
					IR_bFound = ((IR_nDay == 8) || ((IR_nDay > 23) && (IR_nDay < 27)));
				break;
			}

			if(!IR_bFound)
			{
				if(!IR_IsFridayBeforeEasterFromLong(IR_nBackDate) && !IR_IsMondayAfterEasterFromLong(IR_nBackDate))
					IR_bDone = true;
			}
		}

		if(!IR_bDone)
			IR_nBackDate += 1;
	}

	return IR_nBackDate;
}

function IR_GetYearsOfDifferenceFromLong(IR_nOlderDate, IR_nNewerDate, IR_nRoundType, IR_nMonthsSoglia, IR_nDaysSoglia)
{
	var IR_nDate;
	var IR_nMonths;
	var IR_nDays;
	var IR_nNewerDays;
	var IR_nOlderDays;
	var IR_nOlderMonth;
	var IR_nNewerMonth;
	var IR_nYears;
	var IR_nNewerYear;

	if(IR_nOlderDate > IR_nNewerDate)
	{
		IR_nDate = IR_nOlderDate;
		IR_nOlderDate = IR_nNewerDate;
		IR_nNewerDate = IR_nDate;
	}

	IR_nNewerYear = IR_GetYearFromLong(IR_nNewerDate);
	IR_nYears = IR_nNewerYear - IR_GetYearFromLong(IR_nOlderDate);

	IR_nOlderDate = IR_SetYearFromLong(IR_nOlderDate, IR_nNewerYear);

	if(IR_nOlderDate > IR_nNewerDate)
	{
		switch(IR_nRoundType)
		{
			case 0:
				IR_nYears -= 1;
			break;

			case 1:

				IR_nMonths = IR_GetMonthFromLong(IR_nNewerDate) - IR_GetMonthFromLong(IR_nOlderDate);

				if(IR_nMonths <= 0)
					IR_nMonths += 12;

				if(IR_nMonths <= IR_nMonthsSoglia)
					IR_nYears -= 1;
			break;

			case 2:
			break;
		}
	}
	else
	{
		switch(IR_nRoundType)
		{
			case 0:
			break;

			case 1:
				IR_nMonths = IR_GetMonthFromLong(IR_nOlderDate) - IR_GetMonthFromLong(IR_nNewerDate);

				if(IR_nMonths <= 0)
					IR_nMonths += 12;

				if(IR_nMonths > IR_nMonthsSoglia)
					IR_nYears += 1;
			break;

			case 2:
				IR_nYears += 1;
			break;
		}
	}

	return IR_nYears;
}

function IR_CalcolaEta(IR_cData, IR_nType, IR_nMonthSoglia, IR_nDaySoglia)
{
	var IR_nYears = -1;
	var IR_nDate;
	var IR_nToday;

	IR_nDate = IR_DateToLong(IR_cData);

	if(IR_nDate > 0)
	{
		IR_nToday = IR_GetTodayDateAsLong();
		IR_nYears = IR_GetYearsOfDifferenceFromLong(IR_nDate, IR_nToday, IR_nType, IR_nMonthSoglia, IR_nDaySoglia);
	}

	return IR_nYears;
}

function IR_CalcolaEtaGiusta(IR_cData, IR_nMonthSoglia, IR_nDaySoglia)
{
	return IR_CalcolaEta(IR_cData, 1, IR_nMonthSoglia, IR_nDaySoglia);
}

function IR_CalcolaEtaPerDifetto(IR_cData)
{
	return IR_CalcolaEta(IR_cData, 0, 0, 0);
}

function IR_CalcolaEtaPerEccesso(IR_cData)
{
	return IR_CalcolaEta(IR_cData, 2, 0, 0);
}

function IR_AddDaysAndMakeLavorativo(IR_cDate, IR_nDays)
{
	var IR_x;
	var IR_nDate;
	var IR_cResult;

	IR_cResult = '';
	IR_nDate = IR_DateToLong(IR_cDate);

	if(IR_nDate > 0)
	{
		for(IR_x = 0; IR_x < IR_nDays; IR_x++)
		{
			IR_nDate += 1;
			IR_nDate = IR_MakeLavorativoFromLong(IR_nDate);
		}

		IR_cResult = IR_LongToDate(IR_nDate);
	}

	return IR_cResult;
}

function newWindow (a_str_windowURL, a_str_windowName, a_int_windowWidth, a_int_windowHeight, a_bool_scrollbars, a_bool_resizable, a_bool_menubar, a_bool_toolbar, a_bool_addressbar, a_bool_statusbar, a_bool_fullscreen) {
  var int_windowLeft = (screen.width - a_int_windowWidth) / 2;
  var int_windowTop = (screen.height - a_int_windowHeight) / 2;
  var str_windowProperties = 'height=' + a_int_windowHeight + ',width=' + a_int_windowWidth + ',top=' + int_windowTop + ',left=' + int_windowLeft + ',scrollbars=' + a_bool_scrollbars + ',resizable=' + a_bool_resizable + ',menubar=' + a_bool_menubar + ',toolbar=' + a_bool_toolbar + ',location=' + a_bool_addressbar + ',statusbar=' + a_bool_statusbar + ',fullscreen=' + a_bool_fullscreen + '';
  var obj_window = window.open(a_str_windowURL, a_str_windowName, str_windowProperties);
  if (parseInt(navigator.appVersion) >= 4) {
    obj_window.window.focus();
  }
}
