//  Functions to convert civil data to Jewish dat

function jdate(fd,yn,yridx,ily,tly,mnidx,jmn,dom) {
this.fullDate=fd;
this.yearNum=yn;
this.yearIndex=yridx;
this.isLeapYear=ily;
this.tanyaLeapYear=tly;
this.monthIndex=mnidx;
this.ksidran=jmn;
this.dayOfMonth=dom;
}
//=========================================================================================

//regular months names
var rmnames=new Array();
rmnames[1]="Tishrei";
rmnames[2]="Cheshvan";
rmnames[3]="Kislev";
rmnames[4]="Teves";
rmnames[5]="Shvat";
rmnames[6]="Adar";
rmnames[7]="Nisan";
rmnames[8]="Iyar";
rmnames[9]="Sivan";
rmnames[10]="Tammuz";
rmnames[11]="Av";
rmnames[12]="Elul";

//leap months names
var lmnames=new Array();
lmnames[1]="Tishrei";
lmnames[2]="Cheshvan";
lmnames[3]="Kislev";
lmnames[4]="Teves";
lmnames[5]="Shvat";
lmnames[6]="Adar 1";
lmnames[7]="Adar 2";
lmnames[8]="Nisan";
lmnames[9]="Iyar";
lmnames[10]="Sivan";
lmnames[11]="Tammuz";
lmnames[12]="Av";
lmnames[13]="Elul";

//days in month
var monthLen=new Array();
monthLen[1]=30; // Tishrei
monthLen[2]=30; // Cheshvan
monthLen[3]=30; // Kislev
monthLen[4]=29; // Teves
monthLen[5]=30; // Shvat
monthLen[6]=30; // Adar 1
monthLen[7]=29; // Adar 2
monthLen[8]=30; // Nisan
monthLen[9]=29; // Iyar
monthLen[10]=30;// Sivan
monthLen[11]=29;// Tammuz
monthLen[12]=30;// Av
monthLen[13]=29;// Elul

//leap months values
var lmvalues=new Array();
lmvalues[1]=1;
lmvalues[2]=2;
lmvalues[3]=3;
lmvalues[4]=4;
lmvalues[5]=5;
lmvalues[6]=13;
lmvalues[7]=6;
lmvalues[8]=7;
lmvalues[9]=8;
lmvalues[10]=9;
lmvalues[11]=10;
lmvalues[12]=11;
lmvalues[13]=12;

//days in Jewish year from 5760-5774 (mid 2000-2015)
var jyears=new Array();
jyears[1]=385; // 5760
jyears[2]=353; // 5761
jyears[3]=354; // 5762
jyears[4]=385; // 5763
jyears[5]=355;
jyears[6]=383;
jyears[7]=354;
jyears[8]=355;
jyears[9]=383;
jyears[10]=354;
jyears[11]=355;
jyears[12]=385;
jyears[13]=354;
jyears[14]=353;
jyears[15]=385;

var jyearnum=new Array();
jyearnum[1]=5760;
jyearnum[2]=5761;
jyearnum[3]=5762;
jyearnum[4]=5763;
jyearnum[5]=5764;
jyearnum[6]=5765;
jyearnum[7]=5766;
jyearnum[8]=5767;
jyearnum[9]=5768;
jyearnum[10]=5769;
jyearnum[11]=5770;
jyearnum[12]=5771;
jyearnum[13]=5772;
jyearnum[14]=5773;
jyearnum[15]=5774;

var emonth=new Array();
emonth[1]="January";
emonth[2]="February";
emonth[3]="March";
emonth[4]="April";
emonth[5]="May";
emonth[6]="June";
emonth[7]="July";
emonth[8]="August";
emonth[9]="September";
emonth[10]="October";
emonth[11]="November";
emonth[12]="December";

var dayNames=new Array();
dayNames[0]="Friday"
dayNames[1]="Saturday"
dayNames[2]="Sunday"
dayNames[3]="Monday"
dayNames[4]="Tuesday"
dayNames[5]="Wednesday"
dayNames[6]="Thursday"

//=========================================================================================
//function to convert secular date to Jewish date, from 2000 through 2014
//if system date is out of range, returns null

function getJewishDate(engyr,engmn,engday) {

	var yr = 0;
	var mn = 0;
	var jyrtotal = 0;
	var leapyear = 0;
	var shortyr = 0;
	var fullyr = 0;
	var montotal = 0;
	
        if ((engyr<2001) || (engyr>2013) || (engmn>12) || (engday>31)) {
		return false;
		}	 

        if (engmn < 3) {
	  yr = (engyr - 1);
	  mn = (engmn + 13);
	  }
        else {
	  yr = engyr;
	  mn = (engmn + 1);
	  }

	var daystotal = ((Math.floor((1461*yr)/4)+Math.floor((153*mn)/5)+engday)-730450);
	var thisyear = 0;
	var byear = 0;
	var dayofweek=dayNames[(daystotal%7)]

        for (var ayear = 1; ayear<16; ayear ++) {
		thisyear = jyears[ayear];
		if (daystotal > (thisyear + jyrtotal))
		  {
		  jyrtotal+=thisyear;
		  byear=ayear;
		  }
                else {
		  byear=ayear;
		  ayear=16;
		  }
                }

	var jyr = (5759 + byear);
	var daysleft = (daystotal-jyrtotal);
	var tanyaLeap	

        if (jyears[byear]>356) {
		leapyear=1;
		}
        else {
		leapyear=0;
		}

        if (jyears[byear]==353 || jyears[byear]==383) {
		shortyr=1;
		}
        else {
		shortyr=0;
		}
	
        if (jyears[byear]==355 || jyears[byear]==385) {
		fullyr=1;
		}
        else {
		fullyr=0;
		}

	var chodesh = 29;
	var variatn = -1;
	
        for (var jmonth = 1; jmonth<14; jmonth ++) {
          if (((jmonth==2) && (fullyr==1)) || ((jmonth==3) && (0 != (fullyr+shortyr))) || ((jmonth==4) && (shortyr==1)) || ((jmonth==6) && (leapyear==1))) {
			
                        if (daysleft <= (montotal+chodesh)) {
				break;
		   		}
		
		montotal+=chodesh;
		}
          else { 
	  	variatn=(variatn*(-1));
	 	chodesh+=variatn;
			
                        if (daysleft <= (montotal+chodesh)) {
				break;
				}
		montotal+=chodesh;
		}
	}

	var jday = (daysleft-montotal);
	var jewishmonth="";

        if (leapyear==0) {
          jewishmonth=rmnames[jmonth];
	  }
        else { 
          jewishmonth=lmnames[jmonth];
	  }

// for Tanya, leap year shiurim begin & end 19 Kislev
        if (((jyears[byear-1]>356) && (jmonth<3)) || ((jyears[byear-1]>356) && (jmonth==3) && (jday<19)) || ((leapyear==1) && (jmonth==3) && (jday>18)) || ((leapyear==1) && (jmonth>3))){
		tanyaLeap=2;
		}
        else {
		tanyaLeap=1;
		}

// are cheshvan/kislev malei, choser or ksidran
	 var sidran;
       if (fullyr==1) sidran=3;
       if (fullyr+shortyr==0) sidran=2; 
       if (shortyr==1) sidran=1; 

        var fulljewishdate = dayofweek + ", " + jday + " " + jewishmonth + ", " + jyr;
        jewishdate = new jdate(fulljewishdate,jyr,byear,leapyear,tanyaLeap,jmonth,sidran,jday);        
	return jewishdate;
}
