medPrimstav = false; // Set til true dersom også namna frå primstaven skal vere med

// merkedagane-tabell

var redDays = Array(); // = offisielle heilagdagar/fridagar (*=heilagdag, +=flagdag)
redDays[0] = "*+/Nyttårsdag"; // on 1.1.
redDays[1] = "*/Palmesøndag"; // on easter minus 7
redDays[2] = "*/Skjærtorsdag"; // on easter minus 3
redDays[3] = "*/Langfredag"; // on easter minus 2
redDays[4] = "*+/Første påskedag"; // on easter
redDays[5] = "*/Andre påskedag"; // on easter plus 1
redDays[6] = "+/Arbeidarane sin internasjonale kampdag"; // on 1.5
redDays[7] = "+/Grunnlovsdagen"; //  on 17.5
redDays[8] = "*/Kristi himmelfartsdag"; // on easter plus 39 days
redDays[9] = "*+/Første pinsedag"; // on easter plus 49 days
redDays[10] = "*/Andre pinsedag"; // on easter plus 50 days
redDays[11] = "*+/Første juledag"; // on 25.12
redDays[12] = "*/Andre juledag"; // on 26.12

var easter = Array();  // Påskerelaterte merkedagar utanom helgedagar
// easter[0] = "Fastelavnsøndag"; // on easter minus 49. (KDE feil)
easter[0] = "Faste"; // Påske minus 49. 
easter[1] = "Fastelavnsøndag"; // Søndag før faste
// easter[2] = "Oskeonsdag"; // KDE feil
easter[2] = "Oskeonsdag"; // Onsdag etter fastelavnsøndag)
easter[3] = "Påskeaftan"; // on easter minus 1
easter[4] = "Pinseaftan" // on easter plus 48 days
easter[5] = "Bots- og bededag"; // on last sunday in october

var jul = Array(); // : Julerelaterte
jul[0] = "Første søndag i advent"; // on sunday before 24.12 minus 21 days
jul[1] = "Andre søndag i advent"; // on sunday before 24.12 minus 14 days
jul[2] = "Tredje søndag i advent"; // on sunday before 24.12 minus 7 days
jul[3] = "Fjerde søndag i advent"; // on sunday before 24.12
jul[4] = "Luciadagen"; // on 13.12
jul[5] = "Lille julaftan"; // on 23.12 (Ikkje tatt med)
jul[6] = "Julaftan"; // on 24.12

var flagdagar = Array(); // Offisielle flaggdagar som ikkje er høgtidssagar
flagdagar[0] = "+/H.K.H. Prinsesse Ingrid Alexandra sin fødselsdag"; // on 21.1
flagdagar[1] = "+/Samefolkets dag"; // on 6. februar
flagdagar[2] = "+/H.M. Kong Harald V sin fødselsdag"; // on 21. februar
flagdagar[3] = "+/Frigjeringsdagen 1945"; // on 8. mai
flagdagar[4] = "+/Unionsoppløysninga 1905"; // on 7.6
flagdagar[5] = "+/H.M. Dronning Sonja sin fødselsdag"; // on 4. juli
flagdagar[6] = "+/H.K.H. Kronprins Haakon Magnus sin fødselsdag"; // on 20. juli
flagdagar[7] = "+/Olsokdagen"; // on 29.7
flagdagar[8] = "+/H.K.H. Kronprinsesse Mette-Marit sin fødselsdag"; // on 19. august

var andre = Array(); // Andre merkedagar
andre[0] = "Valentinsdagen"; // on 14.2
andre[1] = "Skotårsdagen"; // on 29.2
andre[2] = "Den internasjonale kvinnedagen"; // on 8.3
andre[3] = "Aprilsnarr"; // on 1.4
andre[4] = "Jonsok/Sankthansaftan"; // on 23.6
andre[5] = "Jonsokdagen/Sankthansdagen"; // on 24.6
andre[6] = "Mikkelsmesse"; // on 29.9
andre[7] = "Allehelgensaftan"; // on 31.10
andre[8] = "Allehelgensdag"; // on first sunday in november
andre[9] = "Morsdag"; // on second sunday in february
andre[10] = "Farsdag"; // on second sunday in november
andre[11] = "Nyttårskvelden"; // on 31.12
andre[12] = "Sommartid startar"; // on last sunday in march
andre[13] = "Vintertid startar"; // on last sunday in october
andre[14] = "Dyrskue i Lyngdal"; // Første helga (fre. - søn) i september 

// Slutt KDE "standard".

var Merkedagane = new Array(11);

/**************** SETT OPP TABELLANE *********************************/

//settOppTabellane(2009); // testoppkall
function settOppTabellane(aaret)
{
	Merkedagane = new Array(11);
	// Sett opp stort sett med KDE sine forslag
	Merkedagane[0] = new Array( // januar
	                     " 0", redDays[0], " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", "10", "11", "12", "13", "14", "15",
	                     "16", "17", "18", "19", "20", flagdagar[0], "22", "23", "24", "25", "26", "27", "28", "29", "30", "31");
	Merkedagane[1] = new Array( // februar
	                     " 0", " 1", " 2", " 3", " 4", " 5", flagdagar[1], " 7", " 8", " 9", "10", "11", "12", "13", andre[0], "15",
	                     "16", "17", "18", "19", "20", flagdagar[2], "22", "23", "24", "25", "26", "27", "28","29", "30", "31");
	Merkedagane[2] = new Array( // mars
	                     " 0", " 1", " 2", " 3", " 4", " 5", " 6", " 7", andre[2], " 9", "10", "11", "12", "13", "14", "15",
	                     "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31");
	Merkedagane[3] = new Array( // april
	                     " 0", andre[3], " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", "10", "11", "12", "13", "14", "15",
	                     "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31");
	Merkedagane[4] = new Array( // mai
	                     " 0", redDays[6], " 2", " 3", " 4", " 5", " 6", " 7", flagdagar[3], " 9", "10", "11", "12", "13", "14", "15",
	                     "16", redDays[7], "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31");
	Merkedagane[5] = new Array( // juni
	                     " 0", " 1", " 2", " 3", " 4", " 5", " 6", flagdagar[4], " 8", " 9", "10", "11", "12", "13", "14", "15",
	                     "16", "17", "18", "19", "20", "21", "22", andre[4], andre[5], "25", "26", "27", "28", "29", "30", "31");
	Merkedagane[6] = new Array( // juli
	                     " 0", " 1", " 2", " 3", flagdagar[5], " 5", " 6", " 7", " 8", " 9", "10", "11", "12", "13", "14", "15",
	                     "16", "17", "18", "19", flagdagar[6], "21", "22", "23", "24", "25", "26", "27", "28", flagdagar[7], "30", "31");
	Merkedagane[7] = new Array( // august
	                     " 0", " 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", "10", "11", "12", "13", "14", "15",
	                     "16", "17", "18", flagdagar[8], "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31");
	Merkedagane[8] = new Array( // september
	                     " 0", " 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", "10", "11", "12", "13", "14", "15",
	                     "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", andre[6], "30", "31");
	Merkedagane[9] = new Array( // oktober
	                     " 0", " 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", "10", "11", "12", "13", "14", "15",
	                     "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31");
	Merkedagane[10] = new Array( // november
	                      " 0", " 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", "10", "11", "12", "13", "14", "15",
	                      "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31");
	Merkedagane[11] = new Array( // desember
	                      " 0", " 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", "10", "11", "12", jul[4], "14", "15",
	                      "16", "17", "18", "19", "20", "21", "22", "23", jul[5], redDays[11], redDays[12], "27", "28", "29", "30", andre[11]);


	var paaskeDato = Array(1);
	var tmpDato = Array(1);
    var paaskeDato = EasterDate(aaret); // Frå easterDate.js
	
	// FOR TEST:
//	paaskeDato[0] = 12;
//	paaskeDato[1] = 3;
	// TEST.
	
	var paaskedag = paaskeDato[0];
	var paaskemnd = paaskeDato[1];
	paaske = new Date(aaret, paaskemnd, paaskedag);
	var paaskerelatert = paaske;
    var tmp = new Date();	

	// Oppdater tabellane for påskerelaterte dagar
    tmpDato = finnPaaskerelaterte( -49) // Faste
//	setTabell(tmpDato[1],tmpDato[0],easter[0]); // Ikkje bruk denne
    tmpDato = finnSundayBefore(aaret, tmpDato[1], tmpDato[0]); // Fastelavnsøndag
	setTabell(tmpDato[1],tmpDato[0],easter[1]);
	
	tmp.setFullYear(aaret,tmpDato[1],tmpDato[0]+3);
	tmpDato[0] = tmp.getDate();
	tmpDato[1] = tmp.getMonth();
	setTabell(tmpDato[1],tmpDato[0],easter[2]); // Oskeonsdag
	
	tmpDato = finnPaaskerelaterte( -7); // Palmesøndag
	setTabell(tmpDato[1],tmpDato[0],redDays[1]);
	tmpDato = finnPaaskerelaterte( -3); // Skjærtorsdag
	setTabell(tmpDato[1],tmpDato[0],redDays[2]);
	tmpDato = finnPaaskerelaterte( -2); // Langfredag
	setTabell(tmpDato[1],tmpDato[0],redDays[3]);
	tmpDato = finnPaaskerelaterte(0); // 1. påskedag
	setTabell(tmpDato[1],tmpDato[0],redDays[4]);
    tmpDato = finnPaaskerelaterte(1); // 2. påskedag
	Merkedagane[tmpDato[1]][tmpDato[0]] = redDays[5];
	tmpDato = finnPaaskerelaterte(39); // Kristi himmelfart
	setTabell(tmpDato[1],tmpDato[0],redDays[8]);
	tmpDato = finnPaaskerelaterte(49); // 1. pinsedag
	setTabell(tmpDato[1],tmpDato[0],redDays[9]);
	tmpDato = finnPaaskerelaterte(50); // 2. pinsedag
	setTabell(tmpDato[1],tmpDato[0],redDays[10]);
	var mnd = 11; // Adventsøndagane
	var sundag = finnLastSunday(aaret, 11, 24); // Siste søndag før jul
	setTabell(tmpDato[1],tmpDato[0],"4. søndag i advent");
	for (i = 2; i >= 0; i--)
	{
		sundag = sundag - 7;
		if (sundag < 1)
		{
			mnd = 10;
			sundag = 30 + sundag;
		}
		Merkedagane[mnd][sundag] = (i + 1) + "i. søndag i advent";
	}

	var dato = finnLastSunday(aaret, 9, 31); // Bots- og bededag
	setTabell(9,dato,easter[5]);
	dato = finnLastSunday(aaret, 2, 31); // Start sommartid
	setTabell(2,dato,andre[12]);
	dato = finnLastSunday(aaret, 9, 31); // Slutt sommartid
	setTabell(9,dato,andre[13]);
	dato = finnFirstSunday(aaret, 1) + 7; // Morsdag
	setTabell(1,dato,andre[9]);
	dato = finnFirstSunday(aaret, 10);// Allehelgensdag
	setTabell(10,dato,andre[8]);
	dato = dato + 7; // Farsdag
	setTabell(10,dato,andre[10]);
  dato = finnFirstSunday(aaret, 8); // Søndag for dyrskuet
  if (dato <3) dato = dato + 7;
  setTabell(8,dato-2,andre[14]);
  setTabell(8,dato-1,andre[14]);
	setTabell(8,dato,andre[14]);
	if (medPrimstav) lagPrimstavTabell();
} // Slutt settOppTabellane()


// Hjelperutiner for settOppTabellane()


function setTabell(m,d,tekst) {
var t = '';
  if (isNaN(Merkedagane[m][d]))
    Merkedagane[m][d] = Merkedagane[m][d] + ', '+ tekst;
  else Merkedagane[m][d] = tekst;
}

function finnPaaskerelaterte(d)  // Rutine for å finne påskerelaterte dagar. d=dagar før/etter påskedag
{
	var tmpD = new Date(paaske);
	var resultat = Array(1);
	tmpD.setDate(tmpD.getDate() + d);
	resultat[0] = (tmpD.getDate());
	resultat[1] = (tmpD.getMonth()-1);		
	return (resultat);
}

function finnLastSunday(aar, m, d) // Finn siste søndag i mnd før dato. m=mnd, d=maksdato
{
	var tmpDate = new Date();
	tmpDate.setFullYear(aar, m, d);
	i = 7;
	funn = 0;
	while (i >= 0)
	{
		tmpDate.setDate(d - i);
		if (tmpDate.getDay() == 0)
			break ;
		i--;
	}
	return (tmpDate.getDate());
}

function finnFirstSunday(aar, m)  // Finn første søndag i mnd m=mnd
{
	var tmpDate = new Date();
	tmpDate.setFullYear(aar, m, 1);
	i = 1;
	funn = 0;

	while (i <= 7)
	{
		tmpDate.setDate(i);
		if (tmpDate.getDay() == 0)
			break ;
		i++;
	}
	return (tmpDate.getDate());
}


function finnSundayBefore(aar, m, d)  // Finn søndagen nærast framdøre datoen
{
	var dm = new Array(1);
	var tmpDate = new Date();
	tmpDate.setFullYear(aar, m, d);
	i = tmpDate.getDate();
	var min = i - 7;
	funn = 0;
	while (i >= min)
	{
		tmpDate.setDate(i);
		if (tmpDate.getDay() == 0)
			break ;
		i--;
	}
	dm[0] = tmpDate.getDate();
	dm[1] = tmpDate.getMonth();
	return (dm);
}
// Slutt hjelperutiner for settOppTabellane()
