function EasterDate(aaret) {
  aaret = parseInt(aaret);
  var feil = sjekk(aaret);  
  var utData = new Array(2);  
  if (!feil) {
    utData = PaaskeVestleg(aaret);  
    utData[2] = Mndnamn(utData[1]);
  }
  else utData[0] = "Feil årstal"; 
  return (utData);
}

function EasterDateJulian(aaret) {
  var feil = sjekk(aaret);
  var utData = new Array(2);
  if (!feil) {
    utData = PaaskeJulian(aaret);  
    utData[2] = Mndnamn(utData[1]);
  }
  else utData[0] = "Feil årstal";
  return (utData); // utData[0] er dag, utData[1] er månad nr., utData[2] er månadnamn
}

function EasterDays(aaret) { // Påske x dagar etter 21. mars (vestleg kalender)
  var minutt = 1000 * 60;
  var timar = minutt * 60;
  var dagar = timar * 24;
  var mars21 = new Date(aaret, 3, 21);
  var PaaskeAar = new Date();
  var dag = 0;
  var mnd = 0;
  var feil = sjekk(aaret);
  var datoar = new Array;
  
  if (!feil) {
    datoar = PaaskeVestleg(aaret);
	dag = datoar[0];
	mnd = datoar[1];
	PaaskeAar.setFullYear(aaret,mnd,dag);
	if (PaaskeAar.getTime >= mars21.getTime) {
	  var t = PaaskeAar.getTime() - mars21.getTime();}
	else {
	  t = mars21.getTime() - PaaskeAar.getTime();
	}
	return (Math.floor(t / dagar));
  }
}


// Finn dato for 1. påskedag etter juliansk kalender
function PaaskeJulian(aaret)
{
   var a = 0;
   var i = 0;
   var j = 0;
   var p = 0;
   utData = new Array(1);

   a = aaret % 19;
   i = (19 * a + 15) % 30;
   j = (aaret + INT(aaret, 4) + i) % 7;
   p = i - j + 28;

   jDag = p;
   jMnd = 4;
   if (p > 31)
      jDag = p - 31;
   else
      jMnd = 3;
   utData[0] = jDag;
   utData[1] = jMnd;
   return (utData);	
}

// Finn dato for 1. påskedag i vestleg kalender
function PaaskeVestleg(aaret) {
   var a = 0;
   var c = 0;
   var h = 0;
   var i = 0;
   var j = 0;
   var p = 0;
   var vDag = 0;
   var vMnd = 4;
   var utData = new Array(1);
   a = aaret % 19;   
   c = INT(aaret, 100);         
   h = (c - INT(c, 4) - INT(8 * c + 13, 25) + 19 * a + 15) % 30;      
   i = h - INT(h, 28) * (1 - INT(h, 28)
      * INT(29, h + 1) * INT(21 - a, 11)); 	  
   j = (aaret + INT(aaret, 4) + i + 2 - c + INT(c, 4)) % 7;    
   p = i - j + 28;  
   vDag = p;   
   if (p > 31)
      vDag = p - 31;
   else
      vMnd = 3;
   utData[0] = vDag;
   utData[1] = vMnd;   
   return (utData);	  
}


//Hjelperutinar:
function sjekk(aaret) {
  var feil = false;
  aaret = parseInt(aaret, 10);
  if (isNaN(aaret)){ 
    aaret = 0; // Sett til 0 dersom året ikkje er siffer
	feil = true; }
  if (aaret <= 325){ 
    alert ("Årstalet må vere større enn 325\nPåske innført frå 326");
    feil = true;}
  if (aaret > 4099){ 
    alert ("Denne kalenderen går bare til året 4099");
    feil = true}
  return (feil);	
}

function Mndnamn(m) {
  switch (m) {
    case (3): return ("mars");
    case (4): return ("april");
    case (5): return ("mai");
  }
}

function INT (dividend, divisor) {
// INT divisjon, dvs heiltalsdivisjon.  INT(15,4) = 3
   var negativ = false;
   var result = 0;
   
   if (divisor == 0)
      return null;
   else {
      if (dividend * divisor < 0 )
         negativ = true;
      if (dividend < 0)
         dividend = -dividend;
      if (divisor < 0)
         divisor = -divisor;
      result = ((dividend - (dividend % divisor)) / divisor);	  
      if (negativ)
         return -result
      else
         return result;
   }
}

