/***************************************************************
Codice javascript di Marco Mazzoni aka Morgan Chane, freeware... 
a patto che manteniate questa intestazione nel file! 
Live long and prosper
****************************************************************/

var items = 66;	/*numero di nominativi effettivamente inseriti*/

var found = "";	/*variabili runtime per i calcoli*/
var nextD = 0;
var nextM = 0;
var nextY = 0;
var dm = 0;
var dg = 0;

NowIs = new Date();	/*array delle date, allocazione*/

/*questo codice verrà eseguito al caricamento una e una sola volta*/
var month = NowIs.getMonth();		/*imposta il mese della data odierna*/
month ++;							/*esssendo in base 0 correggi!*/
var day = NowIs.getDate();			/*imposta il giorno della data odierna*/
var year = NowIs.getYear();			/*imposta l'anno della data odierna*/
if (year <= 1900) year += 1900;		/*correggi y2k*/

var todayM = month;					/*variabili globali che manterranno la data odierna*/
var todayY = year;					/*inizializza*/
var todayD = day;


/*alloca e inizializza l'array dei giorni dei mesi*/

mDays = new Array();
mDays[0] = 0;
mDays[1] = 31;
mDays[2] = 28;
mDays[3] = 31;
mDays[4] = 30;
mDays[5] = 31;
mDays[6] = 30;
mDays[7] = 31;
mDays[8] = 31;
mDays[9] = 30;
mDays[10] = 31;
mDays[11] = 30;
mDays[12] = 31;
mDays[13] = 31;

/*Alloca ed inizializza gli array dei compleanni*/

Bday = new Array();
Bmonth = new Array();
Byear = new Array();
Name = new Array();

  Name[0]  ="Umby";
 Byear[0]  = 1969;
Bmonth[0]  = 1;
  Bday[0]  = 10;
  Name[1]  ="NumeroUno©";
 Byear[1]  = 0;
Bmonth[1]  = 1;
  Bday[1]  = 29;
  Name[2]  ="Lord Thanos";
 Byear[2]  = 1973;
Bmonth[2]  = 1;
  Bday[2]  = 30;
  Name[3]  ="Cirinci";
 Byear[3]  = 1976;
Bmonth[3]  = 1;
  Bday[3]  = 31;
  Name[4]  ="Sabsonic";
 Byear[4]  = 1975;
Bmonth[4]  = 2;
  Bday[4]  = 2;
  Name[5]  ="Bay";
 Byear[5]  = 1969;
Bmonth[5]  = 2;
  Bday[5]  = 5;
  Name[6]  ="Marko Van Lennep";
 Byear[6]  = 1965;
Bmonth[6]  = 2;
  Bday[6]  = 6;
  Name[7]  ="Lisitea";
 Byear[7]  = 1973;
Bmonth[7]  = 2;
  Bday[7]  = 7;
  Name[8]  ="Cam";
 Byear[8]  = 0;
Bmonth[8]  = 2;
  Bday[8]  = 8;
  Name[9]  ="Roby One Kenobi";
 Byear[9]  = 0;
Bmonth[9]  = 2;
  Bday[9]  = 16;
  Name[10] ="James Kirk";
 Byear[10] = 0;
Bmonth[10] = 2;
  Bday[10] = 26;
  Name[11] ="Antonio Mercurio";
 Byear[11] = 0;
Bmonth[11] = 3;
  Bday[11] = 5;
  Name[12] ="DeFa";
 Byear[12] = 1970;
Bmonth[12] = 3;
  Bday[12] = 7;
  Name[13] ="Sat'Rain";
 Byear[13] = 1968;
Bmonth[13] = 3;
  Bday[13] = 11;
  Name[14] ="Ian Sig'run";
 Byear[14] = 1979;
Bmonth[14] = 3;
  Bday[14] = 21;
  Name[15] ="Karellen";
 Byear[15] = 0;
Bmonth[15] = 3;
  Bday[15] = 21;
  Name[16] ="K'Ehleyr";
 Byear[16] = 1970;
Bmonth[16] = 3;
  Bday[16] = 21;
  Name[17] ="Roy Batty";
 Byear[17] = 0;
Bmonth[17] = 3;
  Bday[17] = 28;
  Name[18] ="Morgan Chane";
 Byear[18] = 1963;
Bmonth[18] = 4;
  Bday[18] = 6;
  Name[19] ="B'Elanna";
 Byear[19] = 1977;
Bmonth[19] = 4;
  Bday[19] = 20;
  Name[20] ="Vampi";
 Byear[20] = 1963;
Bmonth[20] = 5;
  Bday[20] = 17;
  Name[21] ="Dashana Reb";
 Byear[21] = 1958;
Bmonth[21] = 5;
  Bday[21] = 26;
  Name[22] ="Flegiàs";
 Byear[22] = 1970;
Bmonth[22] = 5;
  Bday[22] = 31;
  Name[23] ="Manù";
 Byear[23] = 1975;
Bmonth[23] = 6;
  Bday[23] = 1;
  Name[24] ="Kyval Keros";
 Byear[24] = 1982;
Bmonth[24] = 6;
  Bday[24] = 3;
  Name[25] ="Mizar";
 Byear[25] = 0;
Bmonth[25] = 6;
  Bday[25] = 6;
  Name[26] ="Melora";
 Byear[26] = 1954;
Bmonth[26] = 6;
  Bday[26] = 15;
  Name[27] ="Ciccillo";
 Byear[27] = 1977;
Bmonth[27] = 6;
  Bday[27] = 16;
  Name[28] ="Elisa";
 Byear[28] = 1971;
Bmonth[28] = 7;
  Bday[28] = 4;
  Name[29] ="Yaia";
 Byear[29] = 0;
Bmonth[29] = 7;
  Bday[29] = 8;
  Name[30] ="Zefram Cochrane";
 Byear[30] = 1975;
Bmonth[30] = 7;
  Bday[30] = 27;
  Name[31] ="Lazarus Long";
 Byear[31] = 1975;
Bmonth[31] = 7;
  Bday[31] = 29;
  Name[32] ="Tino";
 Byear[32] = 1965;
Bmonth[32] = 8;
  Bday[32] = 2;
  Name[33] ="Nic";
 Byear[33] = 0;
Bmonth[33] = 8;
  Bday[33] = 18;
  Name[34] ="Mulo";
 Byear[34] = 1975;
Bmonth[34] = 8;
  Bday[34] = 25;
  Name[35] ="Blind Guardian";
 Byear[35] = 0;
Bmonth[35] = 8;
  Bday[35] = 28;
  Name[36] ="Trax";
 Byear[36] = 0;
Bmonth[36] = 9;
  Bday[36] = 4;
  Name[37] ="Dans";
 Byear[37] = 1984;
Bmonth[37] = 11;
  Bday[37] = 5;
  Name[38] ="NDR-113";
 Byear[38] = 1980;
Bmonth[38] = 11;
  Bday[38] = 13;
  Name[39] ="Zefram";
 Byear[39] = 1980;
Bmonth[39] = 11;
  Bday[39] = 22;
  Name[40] ="Massimo Luciani";
 Byear[40] = 1970;
Bmonth[40] = 11;
  Bday[40] = 26;
  Name[41] ="Shari Y.Duncan";
 Byear[41] = 1982;
Bmonth[41] = 12;
  Bday[41] = 23;
  Name[42] ="Katmay";
 Byear[42] = 1975;
Bmonth[42] = 5;
  Bday[42] = 6;
  Name[43] ="TheJack";
 Byear[43] = 1972;
Bmonth[43] = 10;
  Bday[43] = 22;
  Name[44] ="The Saint";
 Byear[44] = 1969;
Bmonth[44] = 8;
  Bday[44] = 17;
  Name[45] ="Jeri Ryan (7of9 ^___^)";
 Byear[45] = 0;
Bmonth[45] = 2;
  Bday[45] = 22;
  Name[46] ="Jaleen Elox";
 Byear[46] = 1972;
Bmonth[46] = 11;
  Bday[46] = 15;
  Name[47] ="Flora Staglianò";
 Byear[47] = 1963;
Bmonth[47] = 7;
  Bday[47] = 3;
  Name[48] ="Hooboo";
 Byear[48] = 1973;
Bmonth[48] = 12;
  Bday[48] = 3;
  Name[49] ="Diego 'TUG' Cacchiarelli";
 Byear[49] = 1969;
Bmonth[49] = 12;
  Bday[49] = 31;
  Name[50] ="Capitan Uncino";
 Byear[50] = 1976;
Bmonth[50] = 4;
  Bday[50] = 16;
  Name[51] ="Virgilian Kaos Mn";
 Byear[51] = 1972;
Bmonth[51] = 4;
  Bday[51] = 7;
  Name[52] ="Lennier";
 Byear[52] = 1974;
Bmonth[52] = 2;
  Bday[52] = 26;
  Name[53] ="Kluge";
 Byear[53] = 1960;
Bmonth[53] = 1;
  Bday[53] = 9;
  Name[54] ="Giorgio Ravera";
 Byear[54] = 1985;
Bmonth[54] = 1;
  Bday[54] = 7;
  Name[55] ="2FB®foolbrain®";
 Byear[55] = 1979;
Bmonth[55] = 2;
  Bday[55] = 3;
  Name[56] ="voyager";
 Byear[56] = 1974;
Bmonth[56] = 1;
  Bday[56] = 4;
  Name[57] ="ZainettoDiBay®";
 Byear[57] = 1999;
Bmonth[57] = 7;
  Bday[57] = 4;
  Name[58] ="Eugeal";
 Byear[58] = 0;
Bmonth[58] = 5;
  Bday[58] = 28;
  Name[59] ="Luigi Rosa";
 Byear[59] = 0;
Bmonth[59] = 7;
  Bday[59] = 26;
  Name[60] ="Tetsuya";
 Byear[60] = 1973;
Bmonth[60] = 7;
  Bday[60] = 30;
  Name[61] ="R.Daneel Olivaw";
 Byear[61] = 1970;
Bmonth[61] = 11;
  Bday[61] = 7;
  Name[62] ="LorG";
 Byear[62] = 1974;
Bmonth[62] = 9;
  Bday[62] = 26;
  Name[63] ="Hytok";
 Byear[63] = 1972;
Bmonth[63] = 9;
  Bday[63] = 20;
  Name[64] ="Phantom Hope";
 Byear[64] = 1973;
Bmonth[64] = 12;
  Bday[64] = 20;
  Name[65] ="Damar";
 Byear[65] = 1981;
Bmonth[65] = 10;
  Bday[65] = 3;

/*questi non sono noti ma ci dovrebbero essere, 
il contatore generale alle prima linea non li considera*/

  Name[66] ="Nicola Vianello";
 Byear[66] = 0;
Bmonth[66] = 0;
  Bday[66] = 0;

/*Ricerca di una sottostringa in una stringa*/

function sottostringa(all, part)
{
  sAll = all.toLowerCase();
  sPart = part.toLowerCase();

  la = sAll.length;
  lp = sPart.length;
  l = la - lp;
  found = "";
  if (l < 0);

  for (j = 0; j <= l ; j ++) 
  {
    temp = sAll.substring (j, j + lp);
	if (temp == sPart)
	{
	  found = temp;
	  return(1);
	}
  }
  return (0);
}

/*cerca un nick e restituisce la data*/

function ricerca()
{
f = 0;
nr_hit = 0;
string = document.ask.nick.value;

  for (i = 0 ; i < items ; i ++)
  {
    if (sottostringa (Name[i], string) == 1)
	{
	  f = 1;
	  if (nr_hit)
	  {
	  	document.ask.nick.value = document.ask.nick.value + ", " + Name[i] + ": " + Bday[i] + "/" + Bmonth[i];
	  }
	  else
	  {
  		document.ask.nick.value = Name[i] + ": " + Bday[i] + "/" + Bmonth[i];
	  }	 

	  if (Byear[i] != 0)
		document.ask.nick.value = document.ask.nick.value + "/" + Byear[i];

	  nr_hit ++;
	}
  }

  if (f == 0)
  {
    document.ask.nick.value = "Nickname non trovato, controlla e ritenta.";
  }
}

/*azzeramento dei campi*/

function canc()
{
  document.ask.nick.value = "";
  document.decl.next.value = "";
  nextD = day;
  nextM = month;
  nextY = year;
}

/*cerca la prossima occorrenza a partire dalla data correntemente in memoria;*/
/*la prima volta la data iniziale è quella del giorno attuale, le seguenti*/
/*sarà quella dell'ultimo hit*/

function calcola()
{

	fnExact();
	fnNext();
}

/*ricerca corrispondenza esatta tra data attuale e compleanno*/

function fnExact()
{
f = 0;
document.decl.auguri.value = "";

	for (i = 0 ; i < items ; i ++)
	{
		if ((Bday[i] == day) && (Bmonth[i] == month))
		{
			f ++;

			if (f > 1)
				document.decl.auguri.value = document.decl.auguri.value + ", ";

			q = year - Byear[i];
			document.decl.auguri.value =  document.decl.auguri.value + Name[i];
			if (Byear[i] != 0)
				document.decl.auguri.value = document.decl.auguri.value + "(" + q +")";
		}
	}

	if (f == 0)
	{
		document.decl.auguri.value = "Oggi nessuno compie gli anni.";
	}
}

/*Ricerca della data più prossima alla data corrente tra quelle dell'array*/

function fnNext()
{
n = "";
bestSoFar = 400;
nrg = 0;
tgt = -1;
f = 0;
t1 = "";
document.ask.nick.value = "";

	for (i = 0 ; i < items ; i ++)
	{
		if ((Bmonth[i] == month)&&(Bday[i] == day))
			continue;
	
		if (Bmonth[i] < month)
		{
			nrg = 365;
			nrg -= day;
			for (j = month-1 ; j > Bmonth[i] ; j --)
				nrg -= mDays[j];
			nrg -= (mDays[j] - Bday[i]);

			if (nrg < bestSoFar)
			{
				bestSoFar = nrg;
				tgt = i;
			}
		}

		if (Bmonth[i] > month)
		{
			nrg = (mDays[month] - day);
			for (j = month+1 ; j < Bmonth[i]; j++)
				nrg += mDays[j];
			nrg += Bday[i];

			if (nrg < bestSoFar)
			{
				bestSoFar = nrg;
				tgt = i;
			}
		}

		if (Bmonth[i] == month)
		{
			if (Bday[i] >= day)
				nrg = (Bday[i] - day);
			else
				nrg = 365 - (day - Bday[i]);

			if (nrg < bestSoFar)
			{
				bestSoFar = nrg;
				tgt = i;
			}
		}
	}

	nextD=Bday[tgt];
	nextM=Bmonth[tgt];
	nextY=Byear[tgt];

	dataC = " il " + Bday[tgt] + "/" + Bmonth[tgt];

	fnDelta(tgt);

	if ((dm > 0) && (dg > 0))
		t1 = " e ";
	else
		t1 = "";

   	temp = "";

	if (dm == 1)
		temp = dm + " mese" + t1;
	if (dm > 1)
		temp = dm + " mesi" + t1;

	if (dg == 1)
		temp = temp + dg + " giorno,";
	if (dg > 1)
		temp = temp + dg + " giorni,";

	if ((dm == 0) && (dg == 1))
	{
		document.decl.next.value = "Domani è il compleanno di " + Name[tgt];
		fnAlias (tgt);
		document.decl.next.value =  document.decl.next.value + "!" ;
	}
	else
	{
		document.decl.next.value = Name[tgt];
		fnAlias (tgt);
		document.decl.next.value = document.decl.next.value + " fra " + temp + dataC;
	}
}

/*ricerca di più compleanni per la stessa data*/

function fnAlias (target)
{
	for (k = 0 ; k < items ; k ++)
	{
		if (k != target)
		{
			if ((Bday[k] == nextD) && (Bmonth[k] == nextM))
			{
				document.decl.next.value = document.decl.next.value + ", " + Name[k]
			}
		}
	}
}

/*inizializza la ricerca del compleanno successivo a partire dall'ultimo hit*/

function fnSegue()
{
store="";

	day = nextD;  
	month = nextM;  
	year = nextY;  

	fnNext()
	
	day = todayD;
	month = todayM;
	year = todayY;

}

/*calcolo di giorni e mesi dalla data attuale a quella del compleanno selezionato*/

function fnDelta(target)
{
	if (Bmonth[target] < todayM)
	{
		dm = 12 - todayM + Bmonth[target];

		if (Bday[target] < todayD)
		{
			dm --;
			dg = (mDays[todayM] - todayD + Bday[target]);
		}

		if (Bday[target] == todayD)
			dg = 0;

		if (Bday[target] > todayD)
			dg = Bday[target] - todayD;
	}

	if (Bmonth[target] > todayM)
	{
		dm = Bmonth[target] - todayM;
		if (todayD < Bday[target])
			dg = Bday[target] - todayD;
		else
		{
			dm --;
			dg = (mDays[todayM]-todayD) + Bday[target];
		}
	}

	if (Bmonth[target] == todayM)
	{
		if (Bday[target] >= todayD)
		{
			dm = 0;
			dg = Bday[target] - todayD;
		}
		else
		{
			dm = 11;
			dg = Bday[target] + (mDays[todayM]-todayD);
		}	
	}
}


