// Created by: Robert Krzyzanowski and Katalin Czako
window.onload = loadPage;

function loadPage() {
	fillYears();
	
	document.getElementById("curNameDay").innerHTML = getCurNames();
	
	populateTable(document.dateChooser);
	document.getElementById("calendarTable").style.display = "";
	
	if (debugMode == true) {
		window.alert("Calendar is in debug mode.");
	}
}

/*******************
   UTILITY FUNCTIONS
 ********************/
// day of week of month's first day
function getFirstDay(theYear, theMonth){
 var firstDate = new Date(theYear,theMonth,1);
 return firstDate.getDay();
}
// number of days in the month
function getMonthLen(theYear, theMonth) {
 var oneHour = 1000 * 60 * 60;
 var oneDay = oneHour * 24;
 var thisMonth = new Date(theYear, theMonth, 1);
 var nextMonth = new Date(theYear, theMonth + 1, 1);
 var len = Math.ceil((nextMonth.getTime() - 
	thisMonth.getTime() - oneHour)/oneDay);
 return len;
}

// correct for Y2K anomalies
function getY2KYear(today) {
 var yr = today.getYear();
 return ((yr < 100) ? yr + 1900 : yr);
}

function searchNames()
{
	var searchString = nameSimplify(document.searchForm.searchValue.value);
	
	var namesFound = new Array();
	
	for (var i = 0; i < 12; i++) {
		for (var j = 0; j < 2; j++) {
			var month = eval(monthNames[i]+"Names"+(j == 0 ? '' : '2'));
			for (var k = 0; k < month.length; k++) {
				var curName = nameSimplify(month[k])
				
				if (searchString == curName) {
					namesFound[namesFound.length] = [i, k];
				}
			}
		}
	}
	
	outputFoundNames(namesFound);
}

function outputFoundNames(names)
{
	var out;
	
	if (names.length > 0 ) out = "Dates found:";
	else out = "No dates have been found.";
	
	for(var i = 0; i < names.length; i++) {
		out += "<BR />" + theMonths[names[i][0]] + ", " + (names[i][1]+1);
	}
	
	document.getElementById("foundNames").innerHTML = out;
	
}

function nameSimplify(name)
{
	var sName;
	
	sName = name.toLowerCase();
	sName = sName.replace(/[á]/i, 'a');
	sName = sName.replace(/[é]/i, 'e');
	sName = sName.replace(/[í]/i, 'i');
	sName = sName.replace(/[öőó]/i, 'o');
	sName = sName.replace(/[úü]/i, 'u');
	
	return sName;
}

function getCurNames()
{
	var out;
	
	out = "Today is ";
	
	var curMonth = monthNames[(new Date()).getMonth()];
	var curDay = (new Date()).getDate()-1;
	var curName = eval(curMonth + "Names")[curDay];
	
	out += curName + "'s";
	
	curName = eval(curMonth + "Names2")[curDay];
	if (curName != "") {
		out += " and " + curName + "'s";
	}
	
	out += " nameday.";
	
	return out;
}

monthNames = new Array("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec");

// create arrays of month names
theMonths = new Array("Január - January", "Február - February", "Március - March", "Április - April", 
					  "Május - May", "Június - June", "Július - July", "Augusztus - August", 
					  "Szeptember - September", "Október - October", "November - November", 
					  "December - December");

// create arrays of January name days
janNames = new Array("Fruzsina", "Ábel", "Genovéva", "Titusz", "Simon", "Boldizsár", 
					 "Attila", "Gyöngyvér", "Marcell", "Melánia", "Ágota", "Ernő", "Veronika", 
					 "Bódog", "Lóránd", "Gusztáv", "Antal", "Piroska", "Sára",
					 "Fábián", "Ágnes", "Vince", "Zelma", "Timót", "Pál", 
					 "Vanda", "Angelika", "Károly", "Adél", "Martina", "Marcella");

janNames2 = new Array(" "," ", "Benjámin", "Leóna", " ", " ", "Ramóna", " ", " ", " ", " ", " ", " ", " ", "Lóránt",
					  " ", "Antónia", " ", "Márió", "Sebestyén", " ", "Artúr", "Rajmund", " ", " ", "Paula", " ",
					  "Karola", " ", " ", "Gerda");

// create arrays of February name days
febNames = new Array("Ignác", "Karolina", "Balázs", "Ráhel", "Ágota",
 				     "Dorottya", "Tódor", "Aranka", "Abigél", "Elvira",
					 "Bertold", "Lívia", "Ella", "Bálint",
					 "Kolos", "Julianna", "Donát", "Bernadett", "Zsuzsanna",
					 "Aladár", "Eleonóra", "Gerzson", "Alfréd", "Elemér", "Mátyás", 
					 "Géza", "Edina", "Ákos", "Szökőnap");

febNames2 = new Array(" ", "Aida", " ", "Csenge", "Ingrid", "Dóra", "Rómeó", " ", "Alex", " ", "Marietta",
					  "Lídia", "Linda", "Valentin", "Georgina", "Lilla", " ", " ", " ", "Álmos", " ", " ",
					  " ", " ", " ", " ", " ", "Bátor"," ");
  
// create arrays of March name days
marNames = new Array("Albin", "Lujza", "Kornélia", "Kázmér", "Adorján", "Leonóra", "Tamás", 
				     "Zoltán", "Franciska", "Ildikó", "Szilárd", "Gergely", "Krisztián",
					 "Matild", "Kristóf", "Henrietta", "Gertrúd", "Sándor", "József",
					 "Klaudia", "Benedek", "Beáta", "Emőke", "Gábor", "Irén",
					 "Emánuel", "Hajnalka", "Gedeon", "Auguszta", "Zalán", "Árpád");

marNames2 = new Array(" ", " ", " ", "Adrián", "Inez", " ", " ", "Fanni", " ", " ", " ", "Ajtony", " ", " ", " ",
					  "Patrik", "Ede", "Bánk", " ", " ", "Izolda", " ", "Karina", "Irisz", " ", " ", "Johanna",
					  " ", " ", " "," ");
 
// create arrays of April name days
aprNames = new Array("Hugó", "Áron", "Buda", "Izidor", "Vince", "Vilmos", "Herman",
					 "Dénes", "Erhard", "Zsolt", "Leó", "Gyula", "Ida",
					 "Tibor", "Anasztázia", "Csongor", "Rudolf",
					 "Andrea", "Emma", "Tivadar", "Konrád", "Csilla", "Béla",
					 "György", "Márk", "Ervin", "Zita", "Valéria",
					 "Péter", "Katalin");
   
aprNames2 = new Array(" ", " ", "Richárd", " ", " ", "Bíborka", " ", " ", "Csombor", " ", "Szaniszló", " ",
					  "Hermina", "Bene", "Tas", "Bende", "Anasztázia", "Ilma", " ", " ", " ", "Noémi",
					  "Adalbert", "Baján", " ", "Ervina", "Anasztáz", "Aszter", "Antónia", "Kitti");

// create array of May name days
mayNames = new Array("Fülöp", "Zsigmond", "Tímea", "Mónika", "Györgyi", "Ivett", "Gizella", "Mihály",
					 "Gergely", "Ármin", "Ferenc", "Pongrác", "Szervác", "Bonifác", "Zsófia", "Mózes",
					 "Paszkál", "Alexandra", "Ivó", "Bernát", "Konstantin", "Júlia", "Dezső", "Eszter", "Orbán",
					 "Fülöp", "Hella", "Emil", "Magdolna", "Janka", "Angéla");
   
mayNames2 = new Array("Jakab", "Atanáz", "Irma", "Flórián", "Adrián", "Frida", "Dalma", "Acsád",
					  "Fehérke", "Pálma", "Fülöp", "Achilles", "Imola", "Aglája", "Szonja", "Botond",
					  "Andor", "Erik", "Milán", "Felicia", "András", "Rita", " ", "Eliza", "Gergely",
					  "Evelin", "Gyula", "Csanád", "Adelmár", "Zsanett", "Petronella");

// create array of June name days
junNames = new Array("Tünde", "Kármen", "Klotild", "Bulcsú", "Fatime", "Norbert", "Róbert", "Medárd",
					 "Félix", "Margit", "Barnabás", "Villő", "Antal", "Vazul", "Jolán", "Jusztin", "Laura", "Arnold",
					 "Gyárfás", "Rafael", "Alajos", "Paulina", "Zoltán", "Iván", "Vilmos", "János", "László",
					 "Levente", "Péter", "Pál");

junNames2 = new Array("Torda", "Anita", "Cecília", "Fatima", "Bonifác", "Cintia", "Ariadné", "Ellák",
					  "Bódog", "Gréta", "Amábel", "Cinnia", "Anett", "Elizeus", "Vid", "Arany", "Alida", "Levente",
					  "Hajnalka", "Dea", "Leila", "Akács", "Arszlán", "Héra", "Bocsárd", "Pál", "Bársonyka",
					  "Irén", "Pál", "Apostol");

// create array of July name days
julNames = new Array("Tihamér", "Ottó", "Kornél", "Ulrik", "Emese", "Csaba", "Apollónia", "Ellák", "Lukrécia", "Amália",
				     "Nóra", "Izabella", "Jenő", "Ors", "Henrik", "Valter", "Endre", "Frigyes", "Emilia", "Illés", "Dániel",
					 "Magdolna", "Lenke", "Kinga", "Kristóf", "Anna", "Olga", "Szabolcs", "Márta", "Judit", "Oszkár");

julNames2 = new Array("Annamária", "Jenő", "Soma", "Babett", "Sarolta", "Gyárfás", "Bandó", "Arnolda", " ", "Alma",
					  "Lili", "Dalma", "Milda", "Stella", "Roland", "Barót", "Elek", " ", " ", " ", "Daniella",
					  " ", " ", "Kincső", "Jakab", "Anikó", "Liliána", " ", "Flóra", "Xénia", " ");

// create array of August name days
augNames = new Array("Boglárka", "Lehel", "Hermina", "Domonkos", "Krisztina", "Berta",
					 "Ibolya", "László", "Emőd", "Lőrinc", "Zsuzsanna", "Klára", "Ipoly", "Marcell", 
					 "Mária", "Ábrahám", "Jácint", "Ilona", "Huba", "István", "Sámuel",
					 "Menyhért", "Bence", "Bertalan", "Lajos", "Izsó", "Gáspár", "Ágoston", 
					 "Beatrix", "Rózsa", "Erika");

augNames2 = new Array(" ", " ", " ", "Dominika", " ", "Bettina", " ", " ", " ", " ", "Tiborc", " ", " ", " ", 
					  " ", " ", " ", " ", " ", " ", "Hajna", "Mirjam", " ", " ", "Patricia", " ", " ", " ", 
					  "Erna", " ", "Bella");

// create array of September name days
sepNames = new Array("Egyed", "Rebeka", "Hilda", "Rozália", "Viktor", "Zakariás", 
					 "Regina", "Mária", "Ádám", "Nikolett", "Teodóra", "Mária", "Kornél", 
					 "Szeréna", "Enikő", "Edit", "Zsófia", "Diána", "Vilhelmina",
					 "Friderika", "Máté", "Móric", "Tekla", "Gellért",
					 "Eufrozina", "Jusztina", "Adalbert", "Vencel", "Mihály", "Jeromos");

sepNames2 = new Array("Egon", "Dorina", " ", " ", "Lőrinc", " ", " ", "Adrienn", " ", "Hunor", " ", " ", " ", 
					  "Roxána", "Melitta", " ", " ", " ", " ", " ", "Mirella", " ", " ", "Mercédesz",
					  "Kende", "Pál", " ", " ", " ", " ");

// create array of October name days
octNames = new Array("Malvin", "Petra", "Helga", "Ferenc", "Aurél", "Brúnó", "Amália", "Koppány", 
					 "Dénes", "Gedeon", "Brigitta", "Miksa", "Kálmán", "Helén", "Teréz", "Gál", "Hedvig", 
					 "Lukács", "Nándor", "Vendel", "Orsolya", "Előd", "Gyöngyi", "Salamon", "Blanka",
					 "Dömötör", "Szabina", "Simon", "Nárcisz", "Alfonz", "Farkas");

octNames2 = new Array(" ", " ", " ", " ", " ", "Renáta", " ", " ", " ", " ", " ", " ", "Ede", " ", " ", " ", " ", 
					  " ", " ", " ", " ", " ", " ", " ", "Bianka", " ", " ", "Szimonetta", " ", " ", " ");

// create array of November name days
novNames = new Array("Marianna", "Achilles", "Győző", "Károly", "Imre", "Lénárd", "Rezső", "Zsombor",
					 "Tivadar", "Réka", "Márton", "Jónás", "Szilvia", "Aliz", "Albert",
					 "Ödön", "Hortenzia", "Jenő", "Erzsébet", "Jolán", "Olivér", "Cecilia", 
					 "Kelemen", "Emma", "Katalin", "Virág", "Virgil", "Stefánia", "Taksony", "András");

novNames2 = new Array(" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "Renátó", " ", " ", "Lipót",
					  " ", "Gergő", " ", " ", " ", " ", " ", "Klementina", " ", " ", " ", " ", " ", " ", "Andor");

// create array of December name days
decNames = new Array("Elza", "Melinda", "Ferenc", "Borbála", "Vilma", "Miklós",
					 "Ambrus", "Mária", "Natália", "Judit", "Árpád", "Gabriella", "Luca", "Szilárda",
					 "Valér", "Etelka", "Lázár", "Auguszta", "Viola", "Teofil", "Tamás",
					 "Zénó", "Viktória", "Ádám", "Eugénia", "István", "János", "Kamilla",
					 "Tamás", "Dávid", "Szilveszter");

decNames2 = new Array(" ", "Vivien", "Olivia", "Barbara", " ", " ", " ", " ", " ", " ", " ", " ", "Otilia", " ",
					  " ", "Aletta", "Olimpia", " ", " ", " ", " ", " ", " ", "Éva", " ", " ", " ", " ",
					  "Tamara", " ", " ");
		

// return IE4+ or W3C DOM reference for an ID
function getObject(obj) {
 var theObj;
 if (document.all) {
	if (typeof obj == "string") {
	   return document.all(obj);
	} else {
	   return obj.style;
	}
 }
 if (document.getElementById) {
	if (typeof obj == "string") {
	   return document.getElementById(obj);
	} else {
	   return obj.style;
	}
 }
 return null;
}

/************************
 DRAW CALENDAR CONTENTS
 *************************/
// clear and re-populate table based on form's selections
function populateTable(form) {
 var theMonth = form.chooseMonth.selectedIndex;
 var theYear = parseInt(form.chooseYear.options[form.chooseYear.selectedIndex].value);
// initialize date-dependent variables
 var firstDay = getFirstDay(theYear, theMonth);
 var howMany = getMonthLen(theYear, theMonth);
 
// fill in month/year in table header
 getObject("tableHeader").innerHTML = theMonths[theMonth] + 
	" " + theYear;
	
 var nameDays;
 var nameDays2;
 switch (form.chooseMonth.selectedIndex) /// This statement decides which month will be displayed.
 {
	case 0:
		nameDays = janNames;
		nameDays2 = janNames2;
		break
	case 1:
		nameDays = febNames;
		nameDays2 = febNames2;
		break
	case 2:
		nameDays = marNames;
		nameDays2 = marNames2;
		break
	case 3:
		nameDays = aprNames;
		nameDays2 = aprNames2;
		break
	case 4:
		nameDays = mayNames;
		nameDays2 = mayNames2;
		break
	case 5:
		nameDays = junNames;
		nameDays2 = junNames2;
		break
	case 6:
		nameDays = julNames;
		nameDays2 = julNames2;
		break
	case 7:
		nameDays = augNames;
		nameDays2 = augNames2;
		break
	case 8:
		nameDays = sepNames;
		nameDays2 = sepNames2;
		break
	case 9:
		nameDays = octNames;
		nameDays2 = octNames2;
		break
	case 10:
		nameDays = novNames;
		nameDays2 = novNames2;
		break
	case 11:
		nameDays = decNames;
		nameDays2 = decNames2;
		break
 }
	

 // initialize vars for table creation
 var dayCounter = 1;
 var TBody = getObject("tableBody");
 // clear any existing rows
 while (TBody.rows.length > 0) {
	TBody.deleteRow(0);
 }
 var newR, newC;
 var done=false;
 while (!done) {
	// create new row at end
	newR = TBody.insertRow(TBody.rows.length);
	for (var i = 0; i < 7; i++) {
	   // create new cell at end of row
	   newC = newR.insertCell(newR.cells.length);
	   if (TBody.rows.length == 1 && i < firstDay) {
		  // no content for boxes before first day
		  newC.innerHTML = "<BR>";
		  continue;
	   }
	   if (dayCounter == howMany) {
		  // no more rows after this one
		  done = true;
	   }
	   // plug in date (or empty for boxes after last day)				
			if(dayCounter == howMany+1)
			{newC.innerHTML = "<BR>";}
			else
			{newC.innerHTML = dayCounter++ +"<BR>"+ nameDays[dayCounter-2] 
			+"<BR>" + nameDays2[dayCounter-2];}
	}
 }
}

/*******************
 INITIALIZATIONS
 ********************/
// create dynamic list of year choices
function fillYears() {
 var today = new Date();
 var thisYear = today.getFullYear();
 var yearChooser = document.dateChooser.chooseYear;
 for (i = thisYear; i < thisYear + 7; i++) {
	yearChooser.options[yearChooser.options.length] = new Option(i, i);
 }
 setCurrMonth(today);
}
// set month choice to current month
function setCurrMonth(today) {
 document.dateChooser.chooseMonth.selectedIndex = today.getMonth();
}  //OR http://www.soultones.com/216colors.html  --- To choose a different background if you wish

