/**
	Copyright 2010 utvecklarna.se <info@utvecklarna.se>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

 */
 
/**
 * A class that manages Swedish namedays
 * @param {} Configuration properties as an array
 *	{
 *		elm : HTMLElements which will display the namedays. Passed as an id,
 *		a HtmlElement or an array with a combination of both.
 *	}
 * @version 0.9 100416
 */
function NamedayHandler(inobjArgs) {

	var _conf = {
		Elms: []
	};

	/**
	 * Appends passed object to the returned Array. Objects can be passed as
	 * String, a HTMLElement or an array with a combination of both.
	 * @param 	Mixed
	 * @param 	Optional []
	 * @return	HTMLElement[]
	 */
	var pushElm = function(inobjElm, inobjArray) {
		inobjArray = inobjArray || typeof(inobjArray) == 'object' ? inobjArray : [];
		if(inobjElm == null || typeof(inobjElm) == 'undefined') {
			return;
		}
		
		if(typeof(inobjElm) == 'string') {
			inobjElm = document.getElementById(inobjElm);
			if(!inobjElm) {
				return;
			}
			inobjArray.push(inobjElm);
			return;
		}
		if(typeof(inobjElm) == 'object') {
			if(typeof(inobjElm.tagName) != 'undefined') {
				inobjArray.push(inobjElm);
				return;
			}
			for(var i = 0; i < inobjElm.length; i++) {
				pushElm(inobjElm[i], inobjArray);
			}
		}
		return inobjArray;
	}
	
	// Array of all namedays
	var objNameDays = {
		m0: { dH1: ['Ny&aring;rsdagen'], d2: ['Svea', 'Sverker'], d3: ['Alfred', 'Alfrida'], d4: ['Rut', 'Ritva'], d5: ['Hanna', 'Hannele'], d6: ['Baltsar', 'Kasper'], d7: ['August', 'Augusta'], d8: ['Erland', 'Erhard'], d9: ['Gunnar', 'Gunder'], d10: ['Sigurd', 'Sigmund'], d11: ['Hugo', 'Hagar'], d12: ['Frideborg', 'Fridolf'], d13: ['Knut'], d14: ['Felix', 'Felicia'], d15: ['Laura', 'Liv'], d16: ['Hjalmar', 'Hervor'], d17: ['Anton', 'Tony'], d18: ['Hilda', 'Hildur'], d19: ['Henrik', 'Henry'], d20: ['Fabian', 'Sebastian'], d21: ['Agnes', 'Agneta'], d22: ['Vincent', 'Veine'], d23: ['Emilia', 'Emelie'], d24: ['Erika', 'Eira'], d25: ['Paul', 'P&aring;l'], d26: ['Bodil', 'Boel'], d27: ['G&ouml;te', 'G&ouml;ta'], d28: ['Karl', 'Karla'], d29: ['Valter', 'Vilma'], d30: ['Gunhild', 'Gunilla'], d31: ['Ivar', 'Joar'] },
		m1: { d1: ['Max', 'Magda'], d2: ['Marja', 'Mia'], d3: ['Disa', 'Hj&ouml;rdis'], d4: ['Ansgar', 'Anselm'], d5: ['Lisa', 'Elise'], d6: ['Dorotea', 'Dora'], d7: ['Rikard', 'Dick'], d8: ['Berta', 'Berthold'], d9: ['Fanny', 'Betty'], d10: ['Egon', 'Egil'], d11: ['Yngve', 'Ingolf'], d12: ['Evelina', 'Evy'], d13: ['Agne', 'Agnar'], d14: ['Valentin', 'Tina'], d15: ['Sigfrid', 'Sigbritt'], d16: ['Julia', 'Jill'], d17: ['Alexandra', 'Sandra'], d18: ['Frida', 'Fritz'], d19: ['Gabriella', 'Ella'], d20: ['Rasmus', 'Ruben'], d21: ['Hilding', 'Hulda'], d22: ['Marina', 'Marlene'], d23: ['Torsten', 'Torun'], d24: ['Mattias', 'Mats'], d25: ['Sigvard', 'Sivert'], d26: ['Torgny', 'Torkel'], d27: ['Lage', 'Laila'], d28: ['Maria', 'Maja'] },
		m2: { d1: ['Albin', 'Inez'], d2: ['Ernst', 'Erna'], d3: ['Gunborg', 'Gunvor'], d4: ['Adrian', 'Ada'], d5: ['Tora', 'Tor'], d6: ['Ebba', 'Ebbe'], d7: ['Isidor', 'Doris'], d8: ['Siv', 'Saga'], d9: ['Torbj&ouml;rn', 'Ambj&ouml;rn'], d10: ['Edla', 'Ethel'], d11: ['Edvin', 'Elon'], d12: ['Viktoria', 'Viktor'], d13: ['Greger', 'Iris'], d14: ['Matilda', 'Maud'], d15: ['Kristoffer', 'Christel'], d16: ['Herbert', 'Gilbert'], d17: ['Gertrud', 'G&ouml;rel'], d18: ['Edvard', 'Eddie'], d19: ['Josef', 'Josefina'], d20: ['Joakim', 'Kim'], d21: ['Bengt', 'Benny'], d22: ['Viking', 'Vilgot'], d23: ['Gerda', 'Gerd'], d24: ['Gabriel', 'Rafael'], d25: ['Mary', 'Marion'], d26: ['Emanuel', 'Manne'], d27: ['Ralf', 'Raymond'], d28: ['Elma', 'Elmer'], d29: ['Jonas', 'Jens'], d30: ['Holger', 'Reidar'], d31: ['Ester', 'Estrid'] },
		m3: { d1: ['Harald', 'Halvar'], d2: ['Gunnel', 'Gun'], d3: ['Ferdinand', 'Florence'], d4: ['Irene', 'Irja'], d5: ['Nanna', 'Nanny'], d6: ['Vilhelm', 'Willy'], d7: ['Irma', 'Mimmi'], d8: ['Vanja', 'Ronja'], d9: ['Otto', 'Ottilia'], d10: ['Ingvar', 'Ingvor'], d11: ['Ulf', 'Ylva'], d12: ['Julius', 'Gillis'], d13: ['Artur', 'Douglas'], d14: ['Tiburtius', 'Tim'], d15: ['Olivia', 'Oliver'], d16: ['Patrik', 'Patricia'], d17: ['Elias', 'Elis'], d18: ['Valdemar', 'Volmar'], d19: ['Olaus', 'Ola'], d20: ['Amalia', 'Amelie'], d21: ['Annika', 'Anneli'], d22: ['Allan', 'Alida'], d23: ['Georg', 'G&ouml;ran'], d24: ['Vega', 'Viveka'], d25: ['Markus', 'Mark'], d26: ['Teresia', 'Terese'], d27: ['Engelbrekt', 'Enok'], d28: ['Ture', 'Tyko'], d29: ['Kennet', 'Kent'], d30: ['Mariana', 'Marianne'] },
		m4: { d1: ['Valborg', 'Maj'], d2: ['Filip', 'Filippa'], d3: ['John', 'Jack'], d4: ['Monika', 'Mona'], d5: ['Vivianne', 'Vivan'], d6: ['Marit', 'Rita'], d7: ['Lilian', 'Lilly'], d8: ['&aring;ke', 'Ove'], d9: ['Jonatan', 'Gideon'], d10: ['Elvira', 'Elvy'], d11: ['M&aring;rta', 'M&aring;rit'], d12: ['Charlotta', 'Lotta'], d13: ['Linnea', 'Nina'], d14: ['Lillemor', 'Lill'], d15: ['Sofia', 'Sonja'], d16: ['Hilma', 'Hilmer'], d17: ['Nore', 'Nora'], d18: ['Erik', 'Jerker'], d19: ['Majken', 'Majvor'], d20: ['Karolina', 'Lina'], d21: ['Konstantin', 'Conny'], d22: ['Henning', 'Hemming'], d23: ['Desirée', 'Renée'], d24: ['Ivan', 'Yvonne'], d25: ['Urban', 'Ursula'], d26: ['Vilhelmina', 'Helmy'], d27: ['Blenda', 'Beda'], d28: ['Ingeborg', 'Borghild'], d29: ['Jean', 'Jeanette'], d30: ['Fritjof', 'Frej'], d31: ['Isabella', 'Isa'] },
		m5: { d1: ['Rune', 'Runa'], d2: ['Rutger', 'Roger'], d3: ['Ingemar', 'Gudmar'], d4: ['Solveig', 'Solbritt'], d5: ['Bo', 'Boris'], d6: ['Gustav', 'G&ouml;sta'], d7: ['Robert', 'Robin'], d8: ['Eivor', 'Elaine'], d9: ['Petra', 'Petronella'], d10: ['Kerstin', 'Karsten'], d11: ['Bertil', 'Berit'], d12: ['Eskil', 'Esbj&ouml;rn'], d13: ['Aina', 'Eila'], d14: ['H&aring;kan', 'Heidi'], d15: ['Margit', 'Mait'], d16: ['Axel', 'Axelina'], d17: ['Torborg', 'Torvald'], d18: ['Bj&ouml;rn', 'Bjarne'], d19: ['Germund', 'Jerry'], d20: ['Linda', 'Linn'], d21: ['Alf', 'Alva'], d22: ['Paulina', 'Paula'], d23: ['Adolf', 'Adela'], d24: ['Johan', 'Jan'], d25: ['David', 'Salomon'], d26: ['Gunni', 'Jim'], d27: ['Selma', 'Herta'], d28: ['Leo', 'Leopold'], d29: ['Petrus', 'Peter'], d30: ['Elof', 'Leif'] },
		m6: { d1: ['Aron', 'Mirjam'], d2: ['Rosa', 'Rosita'], d3: ['Aurora', 'Adina'], d4: ['Ulrika', 'Ulla'], d5: ['Melker', 'Agaton'], d6: ['Ronald', 'Ronny'], d7: ['Klas', 'Kaj'], d8: ['Kjell', 'Tjelvar'], d9: ['J&ouml;rgen', '&ouml;rjan'], d10: ['Anund', 'Gunda'], d11: ['Eleonora', 'Ellinor'], d12: ['Herman', 'Hermine'], d13: ['Joel', 'Judit'], d14: ['Folke', 'Odd'], d15: ['Ragnhild', 'Ragnvald'], d16: ['Reinhold', 'Reine'], d17: ['Alexis', 'Alice'], d18: ['Fredrik', 'Fred'], d19: ['Sara', 'Sally'], d20: ['Margareta', 'Greta'], d21: ['Johanna', 'Jane'], d22: ['Magdalena', 'Madeleine'], d23: ['Emma', 'Emmy'], d24: ['Kristina', 'Stina'], d25: ['Jakob', 'James'], d26: ['Jesper', 'Jessika'], d27: ['Marta', 'Moa'], d28: ['Botvid', 'Seved'], d29: ['Olof', 'Olle'], d30: ['Algot', 'Margot'], d31: ['Elin', 'Elna'] },
		m7: { d1: ['Per', 'Pernilla'], d2: ['Karin', 'Kajsa'], d3: ['Tage', 'Tanja'], d4: ['Arne', 'Arnold'], d5: ['Ulrik', 'Alrik'], d6: ['Sixten', 'S&ouml;lve'], d7: ['Dennis', 'Donald'], d8: ['Silvia', 'Sylvia'], d9: ['Roland', 'Roine'], d10: ['Lars', 'Lorentz'], d11: ['Susanna', 'Sanna'], d12: ['Klara', 'Clary'], d13: ['Hillevi', 'Gullvi'], d14: ['William', 'Bill'], d15: ['Stella', 'Stellan'], d16: ['Brynolf', 'Sigyn'], d17: ['Verner', 'Veronika'], d18: ['Helena', 'Lena'], d19: ['Magnus', 'M&aring;ns'], d20: ['Bernhard', 'Bernt'], d21: ['Jon', 'Jonna'], d22: ['Henrietta', 'Henny'], d23: ['Signe', 'Signhild'], d24: ['Bartolomeus', 'Bert'], d25: ['Lovisa', 'Louise'], d26: ['&ouml;sten', 'Ejvind'], d27: ['Rolf', 'Rudolf'], d28: ['Gurli', 'Gull'], d29: ['Hans', 'Hampus'], d30: ['Albert', 'Albertina'], d31: ['Arvid', 'Vidar'] },
		m8: { d1: ['Samuel', 'Sam'], d2: ['Justus', 'Justina'], d3: ['Alfhild', 'Alfons'], d4: ['Gisela', 'Glenn'], d5: ['Harry', 'Harriet'], d6: ['Sakarias', 'Esaias'], d7: ['Regina', 'Roy'], d8: ['Alma', 'Ally'], d9: ['Anita', 'Anja'], d10: ['Tord', 'Tove'], d11: ['Dagny', 'Daniela'], d12: ['Tyra', '&Aring;sa'], d13: ['Sture', 'Styrbj&ouml;rn'], d14: ['Ida', 'Elida'], d15: ['Sigrid', 'Siri'], d16: ['Dag', 'Daga'], d17: ['Hildegard', 'Magnhild'], d18: ['Alvar', 'Orvar'], d19: ['Fredrika', 'Carita'], d20: ['Agda', 'Agata'], d21: ['Ellen', 'Elly'], d22: ['Maurits', 'Morgan'], d23: ['Tekla', 'Tea'], d24: ['Gerhard', 'Gert'], d25: ['K&aring;re', 'Tryggve'], d26: ['Einar', 'Enar'], d27: ['Dagmar', 'Rigmor'], d28: ['Lennart', 'Leonard'], d29: ['Mikael', 'Mikaela'], d30: ['Helge', 'Helny'] },
		m9: { d1: ['Ragnar', 'Ragna'], d2: ['Ludvig', 'Louis'], d3: ['Evald', 'Osvald'], d4: ['Frans', 'Frank'], d5: ['Bror', 'Bruno'], d6: ['Jenny', 'Jennifer'], d7: ['Birgitta', 'Britta'], d8: ['Nils', 'Nelly'], d9: ['Ingrid', 'Inger'], d10: ['Helmer', 'Hadar'], d11: ['Erling', 'Jarl'], d12: ['Valfrid', 'Ernfrid'], d13: ['Birgit', 'Britt'], d14: ['Manfred', 'Helfrid'], d15: ['Hedvig', 'Hedda'], d16: ['Fingal', 'Finn'], d17: ['Antonia', 'Annette'], d18: ['Lukas', 'Matteus'], d19: ['Tore', 'Torleif'], d20: ['Sibylla', 'Camilla'], d21: ['Birger', 'B&ouml;rje'], d22: ['Marika', 'Marita'], d23: ['S&ouml;ren', 'Severin'], d24: ['Evert', 'Eilert'], d25: ['Inga', 'Ingvald'], d26: ['Amanda', 'My'], d27: ['Sabina', 'Ina'], d28: ['Simon', 'Simone'], d29: ['Viola', 'Vivi'], d30: ['Elsa', 'Elsie'], d31: ['Edit', 'Edgar'] },
		m10: { d1: ['André', 'Andrea'], d2: ['Tobias', 'Toini'], d3: ['Hubert', 'Diana'], d4: ['Uno', 'Unn'], d5: ['Eugen', 'Eugenia'], d6: ['Gustav Adolf'], d7: ['Ingegerd', 'Ingela'], d8: ['Vendela', 'Vanda'], d9: ['Teodor', 'Ted'], d10: ['Martin', 'Martina'], d11: ['M&aring;rten'], d12: ['Konrad', 'Kurt'], d13: ['Kristian', 'Krister'], d14: ['Emil', 'Mildred'], d15: ['Katja', 'Nadja'], d16: ['Edmund', 'Gudmund'], d17: ['Naemi', 'Nancy'], d18: ['Pierre', 'Percy'], d19: ['Elisabet', 'Lisbet'], d20: ['Pontus', 'Pia'], d21: ['Helga', 'Olga'], d22: ['Cecilia', 'Cornelia'], d23: ['Klemens', 'Clarence'], d24: ['Gudrun', 'Runar'], d25: ['Katarina', 'Carina'], d26: ['Linus', 'Love'], d27: ['Astrid', 'Asta'], d28: ['Malte', 'Malkolm'], d29: ['Sune', 'Synn&ouml;ve'], d30: ['Anders', 'Andreas'] },
		m11: { d1: ['Oskar', 'Ossian'], d2: ['Beata', 'Beatrice'], d3: ['Lydia', 'Carola'], d4: ['Barbro', 'Barbara'], d5: ['Sven', 'Svante'], d6: ['Nikolaus', 'Niklas'], d7: ['Angelika', 'Angela'], d8: ['Virginia', 'Vera'], d9: ['Anna', 'Annie'], d10: ['Malin', 'Malena'], d11: ['Daniel', 'Dan'], d12: ['Alexander', 'Alex'], d13: ['Lucia'], d14: ['Sten', 'Stig'], d15: ['Gottfrid', 'Gotthard'], d16: ['Assar', 'Astor'], d17: ['Inge', 'Ingemund'], d18: ['Abraham', 'Efraim'], d19: ['Isak', 'Rebecka'], d20: ['Israel', 'Moses'], d21: ['Tomas', 'Tom'], d22: ['Natanael', 'Natalia'], d23: ['Adam'], d24: ['Eva'], dH25: ['Juldagen'], d26: ['Stefan', 'Staffan'], d27: ['Johannes', 'Hannes'], d28: ['Rakel', 'Benjamin'], d29: ['Abel', 'Set'], d30: ['Gunl&ouml;g', '&Aring;sl&ouml;g'], d31: ['Sylvester'] }
	}
	
	/**
	 * Gets the namedays for passed date or a string that describes the occasion for
	 * the day in question, such as a holiday. The function defaults to today.
	 * @param 	Int The zero-based month index
	 * @param 	Int The day of the month to get
	 * @returns	[]
	 */
	var getNames = function(inintMonth, inintDay) {
		var objDate = new Date();
		if(!isNaN(inintMonth) && inintDay) {
			objDate.setMonth(inintMonth, inintDay);
		}
		var objNames = eval('objNameDays.m' + objDate.getMonth() + '.d' + objDate.getDate());
		return typeof(objNames) != 'undefined' ? objNames : [];
	}
	
	/**
	 * Sets passed HTMLElement's innerHTML property to the value of passed dates
	 * nameday information.
	 * @param String The id of the HTMLElement
	 * @param Int The month
	 * @param Int The day
	 */
	var renderNames = function(inobjElm, inintMonth, inintDay) {
		var objNames = getNames(inintMonth, inintDay);
		var strNames = '';
		switch(objNames.length) {
			case 0: strNames = 'Ingen'; break;
			case 1: strNames = objNames[0]; break;
			case 2: strNames = objNames[0] + ' och ' + objNames[1]; break;
		}
		inobjElm.innerHTML = strNames;
	}

	/** 
	 * Acts as a constructor for this class
	 */
	var init = function() {
		pushElm(inobjArgs.elm, _conf.Elms);
		for(var i = 0; i < _conf.Elms.length; i++) {
			renderNames(_conf.Elms[i], null, null);
		}
	}
	init();
}


