// JScript source code
/* Days difference from current Orthodox Easter calculation */
var CurrDate=new Date();	
var year=CurrDate.getYear();
var DayName=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
var oneMinute=1000*60;
var CurrentDate=(CurrDate.getYear() + "-" + (CurrDate.getMonth()+1) + "-" + CurrDate.getDate());	
	
var intervalObject=new Object();
intervalObject["yyyy"]={units:1000*60*60*24*365,measure:"year"};
intervalObject["m"]={units:1000*60*60*24*30,measure:"month"};
intervalObject["d"]={units:1000*60*60*24,measure:"day"};
intervalObject["Q"]={units:intervalObject["m"].units*3,measure:"quarter"};
intervalObject["H"]={units:oneMinute*60,measure:"hour"};
intervalObject["N"]={units:oneMinute,measure:"minute"};
intervalObject["S"]={units:1000,measure:"second"};
	
function DateDiff(dateAddObj){ 
	this.interval=dateAddObj.interval;
	this.date1=dateAddObj.date1;
	this.date2=dateAddObj.date2;
	this.calculate=calculate;
	this.calculate();
}

Date.prototype.DateDiff=DateDiff;
	
function calculate(){
	var paramDate1=new String(this.date1);
	splitDate1=paramDate1.split("-");
	paramDateYear1=splitDate1[0];
	paramDateMonth1=splitDate1[1]-1;
	paramDateDay1=splitDate1[2];
	if(paramDateMonth1>12){
		alert("Invalid Month!");
		return false;
	}
	if(paramDateDay1>31){
		alert("Invalid Day!");
		return false;
	}
		
		
	var paramDate2=new String(this.date2);
	splitDate2=paramDate2.split("-");
	paramDateYear2=splitDate2[0];
	paramDateMonth2=splitDate2[1]-1;
	paramDateDay2=splitDate2[2];
	if(paramDateMonth2>12){
		alert("Invalid Month!");
		return false;
	}
	if(paramDateDay2>31){
		alert("Invalid Day!");
		return false;
	}
				
	var paramDate1Object=new Date(paramDateYear1,paramDateMonth1,paramDateDay1);
		paramDate1Object.setHours(0);
		paramDate1Object.setMinutes(0);
		paramDate1Object.setSeconds(0);
	//paramDate1Object.getTimezoneOffset() * oneMinute;
	var paramDate1ObjectTime=paramDate1Object.getTime();
		
	var paramDate2Object=new Date(paramDateYear2,paramDateMonth2,paramDateDay2);
		paramDate2Object.setHours(0);
		paramDate2Object.setMinutes(0);
		paramDate2Object.setSeconds(0);
		var paramDate2ObjectTime=paramDate2Object.getTime();
		
	if(paramDate2Object>paramDate1Object){
		DSTAdjust=(paramDate2Object.getTimezoneOffset() - paramDate1Object.getTimezoneOffset()) * oneMinute;
			
	}
	else{
		DSTAdjust=(paramDate1Object.getTimezoneOffset() - paramDate2Object.getTimezoneOffset()) * oneMinute;
 	}
		
	if(typeof intervalObject[this.interval]!="undefined"){
		if(typeof intervalObject[this.interval].units=="undefined"){
			alert("Interval is invalid!");
			return false;
		}
			
		var diff=Math.abs(paramDate2ObjectTime-paramDate1ObjectTime) - DSTAdjust;
		var timeDiff=Math.floor(diff/intervalObject[this.interval].units);
		if(timeDiff>1){
			var rname=intervalObject[this.interval].measure + "s";
		}
		else{
			var rname=intervalObject[this.interval].measure;
		}
			
		this.difference=parseInt(timeDiff);
	}
	else{
		this.difference="Wrong format of interval!";
		
		}
		
}
  
/* Performs integer division of num/dvsr - eg IntDiv(9,4)=2 */
/************************************************************/
function IntDiv (num, dvsr) 
{
 var negate = false;
 var result = 0;
 if (dvsr == 0)
     return null;
 else {
       if (num * dvsr < 0 )
           negate = true;
       if (num < 0)
           num = -num;
       if (dvsr < 0)
           dvsr = -dvsr;
       result = ((num - (num % dvsr)) / dvsr);
       if (negate)
           return -result;
       else
           return result;
      }
}

/* Function for general use */ 
/****************************/
function EasterJulian()
{
 var g = 0;
 var i = 0;
 var j = 0;
 var p = 0;

 g = year % 19;
 i = (19 * g + 15) % 30;
 j = (year + IntDiv(year, 4) + i) % 7;
 p = i - j + 28;
 jDay = p;
 jMonth = 4;
 if (p > 31)
     jDay = p - 31;
 else
     jMonth = 3;
}	

/* Even though the Julian calendar is no longer in use Orthodox Easters are still based on this calendar */
/* NOTE! JULIAN Easter Date must be calculated first! This function converts Julian March and April		 */
/* Easter Sunday dates to Gregorian calendar dates  													 */
/*********************************************************************************************************/
function EasterOrthodox (yr, jDay, jMonth)
{
 var extra = 0;
 var tmp = 0;	 
 oDay = 0;
 oMonth = 0;

 if ((yr > 1582) && (yr <= 4099)) 
    {
     extra = 10;
     if (yr > 1600) 
        {
		 tmp = IntDiv(yr, 100) - 16;
         extra = extra + tmp - IntDiv(tmp, 4);
        }				      
        oDay = jDay + extra;
        oMonth = jMonth;
        if ((oMonth == 3) && (oDay > 31)) 
	       {
            oMonth = 4;
            oDay = oDay - 31;
           }
        if ((oMonth == 4) && (oDay > 30)) 
	       {
            oMonth = 5;
            oDay = oDay - 30;
           }
    }
}
